我想在Chromebook上使用Chromedriver运行Selenium测试,但无法使其正常工作。
设置
我已经安装了crouton和chromebrew。 chromebrew拥有用于virtualenv和Python3.6的软件包,加上pip install Selenium
,我得到了Selenium。从ChromeDriver ChromeOS documentation中,我知道chromedriver在/usr/local/chromedriver
中。调用它:
chronos@localhost /usr/local/chromedriver $ chromedriver
Starting ChromeDriver 2.24 on port 9515
Only local connections are allowed.
给我版本,我只想测试localhost
,所以我很好,并拥有:
Versions:
ChromiumOS 55.0.2883.100 (64-bit)
Python 3.6
Selenium bindings for Python 3.13.0
Chromedriver 2.24
我(我想)知道Chromedriver的行为类似于端口9515上的服务器,正在等待来自test.py
的呼叫。我一直在摆弄直到没有更多的错误因为缺少chromedriver / permissions / etc。
测试文件
我的测试文件仅包含:
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.binary_location = '/etc/chromium.exe'
driver = webdriver.Chrome('/usr/local/chromedriver/chromedriver', chrome_options=chrome_options)
driver.get("http://localhost:8000")
如果我调用python3 test.py
或get("http://localhost:8000")
没有任何反应,并且在我的python3调用中,我最终得到以下结果:
Traceback (most recent call last):
File "test.py", line 6, in <module>
driver = webdriver.Chrome('/usr/local/chromedriver/chromedriver', chrome_options=chrome_options)
File "/usr/local/demo/venv/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 75, in __init__
desired_capabilities=desired_capabilities)
File "/usr/local/demo/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 156, in __init__
self.start_session(capabilities, browser_profile)
File "/usr/local/demo/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 251, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/demo/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 320, in execute
self.error_handler.check_response(response)
File "/usr/local/demo/venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: chrome not reachable
(Driver info: chromedriver=2.24,platform=Linux 3.14.0 x86_64)
我还在chromedriver documentation上找到了此测试脚本,以将chromedriver作为服务运行,其结果与上述相同:
import time
from selenium import webdriver
import selenium.webdriver.chrome.service as service
service = service.Service('/usr/local/chromedriver/chromedriver')
service.start()
capabilities = {'chrome.binary': '/etc/chromium.exe'}
driver = webdriver.Remote(service.service_url, capabilities)
driver.get('http://localhost:8000');
time.sleep(5) # Let the user actually see something!
driver.quit()
您会看到我在功能中将Chrome替换为自定义Chromium。从chromedriver documentation到此SO answer,这是用自定义二进制代码替换默认Chrome二进制文件的方法。
我从github issue中了解到,问题可能出在各个版本的组件之间不能很好地配合,但是指向的Chromedriver documentation并没有真正告诉我从哪里开始寻找尝试哪个版本。
我认为除了不兼容的版本外,我已经涵盖了所有情况,所以问题是,谁能告诉我哪个版本可以运行该版本?
答案 0 :(得分:1)
此错误消息...
selenium.common.exceptions.WebDriverException: Message: chrome not reachable
...表示 ChromeDriver 无法启动/产生新的 WebBrowser ,即 Chrome浏览器会话。
除了此错误外,还有很多可能性,如下所示:
在使用 Linux操作系统时,当您提到 chromium 二进制文件的绝对路径时,您需要剥离扩展名.exe
,如下所示:
chrome_options.binary_location = '/etc/chromium'
在初始化 Chrome 浏览会话时,您需要按以下方式传递参数 chrome_options 和 executable_path :
>driver = webdriver.Chrome(executable_path='/usr/local/chromedriver/chromedriver', chrome_options=chrome_options)
就像常规的 Chrome浏览器 GA版本一样, Chrome Team 会发布具有增强/修改功能以及对应功能的 ChromeDriver 二进制文件支持的 Chrome浏览器版本。您需要确保正在使用的chrome
和chromedriver
二进制文件在Release Notes之后是同步的。
中找到有关版本控制的相关讨论。
但是,您的主要问题是正在使用的二进制文件版本之间的不兼容性:
支持 Chrome v52-54
支持 Chrome v54-56
因此 ChromeDriver v2.24 与 Chrome浏览器v55.0
之间存在明显的不匹配@Test
。