Module: Selenium::WebDriver::Platform Private

Defined in:
build/rb/lib/selenium/webdriver/common/platform.rb

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

Class Method Summary collapse

Class Method Details

.assert_executable(path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



144
145
146
147
148
149
150
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 144

def assert_executable(path)
  assert_file(path)

  return if File.executable? path

  raise Error::WebDriverError, "not executable: #{path.inspect}"
end

.assert_file(path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



138
139
140
141
142
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 138

def assert_file(path)
  return if File.file? path

  raise Error::WebDriverError, "not a file: #{path.inspect}"
end

.bitsizeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



65
66
67
68
69
70
71
72
73
74
75
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 65

def bitsize
  @bitsize ||= if defined?(FFI::Platform::ADDRESS_SIZE)
                 FFI::Platform::ADDRESS_SIZE
               elsif defined?(FFI)
                 FFI.type_size(:pointer) == 4 ? 32 : 64
               elsif jruby?
                 Integer(ENV_JAVA['sun.arch.data.model'])
               else
                 1.size == 4 ? 32 : 64
               end
end

.ciObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



53
54
55
56
57
58
59
60
61
62
63
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 53

def ci
  if ENV['TRAVIS']
    :travis
  elsif ENV['JENKINS']
    :jenkins
  elsif ENV['APPVEYOR']
    :appveyor
  elsif ENV['GITHUB_ACTIONS']
    :github
  end
end

.cygwin?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


106
107
108
109
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 106

def cygwin?
  RUBY_PLATFORM =~ /cygwin/
  !Regexp.last_match.nil?
end

.cygwin_path(path, **opts) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



119
120
121
122
123
124
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 119

def cygwin_path(path, **opts)
  flags = []
  opts.each { |k, v| flags << "--#{k}" if v }

  `cygpath #{flags.join ' '} "#{path}"`.strip
end

.engineObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



33
34
35
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 33

def engine
  @engine ||= RUBY_ENGINE.to_sym
end

.exit_hookObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



152
153
154
155
156
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 152

def exit_hook
  pid = Process.pid

  at_exit { yield if Process.pid == pid }
end

.find_binary(*binary_names) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 158

def find_binary(*binary_names)
  paths = ENV['PATH'].split(File::PATH_SEPARATOR)

  if windows?
    binary_names.map! { |n| "#{n}.exe" }
    binary_names.dup.each { |n| binary_names << n.gsub('exe', 'bat') }
  end

  binary_names.each do |binary_name|
    paths.each do |path|
      full_path = File.join(path, binary_name)
      full_path = unix_path(full_path) if windows?
      exe = Dir.glob(full_path).find { |f| File.executable?(f) }
      return exe if exe
    end
  end

  nil
end

.find_in_program_files(*binary_names) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 178

def find_in_program_files(*binary_names)
  paths = [
    ENV['PROGRAMFILES'] || '\\Program Files',
    ENV['ProgramFiles(x86)'] || '\\Program Files (x86)',
    ENV['ProgramW6432'] || '\\Program Files'
  ]

  paths.each do |root|
    binary_names.each do |name|
      exe = File.join(root, name)
      return exe if File.executable?(exe)
    end
  end

  nil
end

.homeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



29
30
31
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 29

def home
  @home ||= Dir.home
end

.interfacesObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



219
220
221
222
223
224
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 219

def interfaces
  interfaces = Socket.getaddrinfo('localhost', 8080).map { |e| e[3] }
  interfaces += ['0.0.0.0', Platform.ip]

  interfaces.compact.uniq
end

.ipObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 203

def ip
  orig = Socket.do_not_reverse_lookup
  Socket.do_not_reverse_lookup = true

  begin
    UDPSocket.open do |s|
      s.connect '8.8.8.8', 53
      return s.addr.last
    end
  ensure
    Socket.do_not_reverse_lookup = orig
  end
rescue Errno::ENETUNREACH, Errno::EHOSTUNREACH
  # no external ip
end

.jruby?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


77
78
79
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 77

def jruby?
  engine == :jruby
end

.linux?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


93
94
95
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 93

def linux?
  os == :linux
end

.localhostObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



195
196
197
198
199
200
201
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 195

def localhost
  info = Socket.getaddrinfo 'localhost', 80, Socket::AF_INET, Socket::SOCK_STREAM

  return info[0][3] unless info.empty?

  raise Error::WebDriverError, "unable to translate 'localhost' for TCP + IPv4"
end

.mac?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


89
90
91
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 89

def mac?
  os == :macosx
end

.make_writable(file) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



134
135
136
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 134

def make_writable(file)
  File.chmod 0o766, file
end

.null_deviceObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



111
112
113
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 111

def null_device
  File::NULL
end

.osObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 37

def os
  host_os = RbConfig::CONFIG['host_os']
  @os ||= case host_os
          when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
            :windows
          when /darwin|mac os/
            :macosx
          when /linux/
            :linux
          when /solaris|bsd/
            :unix
          else
            raise Error::WebDriverError, "unknown os: #{host_os.inspect}"
          end
end

.ruby_versionObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



81
82
83
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 81

def ruby_version
  RUBY_VERSION
end

.unix_path(path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



126
127
128
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 126

def unix_path(path)
  path.tr(File::ALT_SEPARATOR, File::SEPARATOR)
end

.windows?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


85
86
87
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 85

def windows?
  os == :windows
end

.windows_path(path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



130
131
132
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 130

def windows_path(path)
  path.tr(File::SEPARATOR, File::ALT_SEPARATOR)
end

.wrap_in_quotes_if_necessary(str) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



115
116
117
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 115

def wrap_in_quotes_if_necessary(str)
  windows? && !cygwin? ? %("#{str}") : str
end

.wsl?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


97
98
99
100
101
102
103
104
# File 'build/rb/lib/selenium/webdriver/common/platform.rb', line 97

def wsl?
  return false unless linux?

  File.read('/proc/version').downcase.include?('microsoft')
rescue Errno::EACCES
  # the file cannot be accessed on Linux on DeX
  false
end