【发布时间】:2019-02-25 18:04:25
【问题描述】:
在开发环境中本地运行时出现 Travis CI 错误的 Selenium 测试失败。我收到一条错误消息,提示 Firefox 无法在 localhost 上建立与服务器的连接。我试图让测试在本地运行并失败,这样我就可以调试它而无需推送到 Travis CI 构建。我正在开发一个 Python-Flask 网络应用程序,该应用程序使用 docker 容器作为网络应用程序和 postgres 数据库。
这是测试:
def test_name_capitalization(mockdata, browser):
browser.get("http://127.0.0.1:5000/auth/login")
wait_for_page_load(browser)
test_pairs = [("mcDonald", "McDonald"), ("Mei-Ying", "Mei-Ying"),
("G", "G"), ("oh", "Oh")]
for test_pair in test_pairs:
test_input = test_pair[0]
test_output = test_pair[1]
# enter a name to test
browser.get("http://127.0.0.1:5000/officer/new")
wait_for_element(browser, By.ID, "name")
elem = browser.find_element_by_id("name")
elem.clear()
elem.send_keys(test_input)
browser.find_element_by_id("submit").click()
# get past the "Submit images" page
images_button = browser.find_element_by_class_name("btn btn-primary")
images_button.click()
# check result
wait_for_element(browser, By.TAG_NAME, "tbody")
rendered_field = browser.find_element_by_tag_name("h1").text
rendered_name = rendered_field.split(":")[1].strip()
assert rendered_name == test_output
在 Travis CI 中失败并出现以下错误:
# get past the "Submit images" page
> images_button = browser.find_element_by_class_name("btn btn-primary")
tests/test_functional.py:131:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../../../virtualenv/python3.6.3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:563: in find_element_by_class_name
return self.find_element(by=By.CLASS_NAME, value=name)
../../../../virtualenv/python3.6.3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:966: in find_element
'value': value})['value']
../../../../virtualenv/python3.6.3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:320: in execute
self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7ff1c16f0c50>
response = {'status': 404, 'value': '{"error":"no such element","message":"Unable to locate element: .btn btn-primary"}'}
当我在本地运行测试时输出不同。
我运行以下
name=test_name_capitalization make test
并在本地获取这些错误
tests/test_functional.py::test_name_capitalization
[gw0] [100%] FAILED tests/test_functional.py::test_name_capitalization
[gw0] [100%] ERROR tests/test_functional.py::test_name_capitalization
_______________________________________________________________________________ ERROR at teardown of test_name_capitalization ________________________________________________________________________________
[gw0] linux -- Python 3.7.2 /usr/local/bin/python
tp = <class 'selenium.common.exceptions.WebDriverException'>, value = None, tb = None
def reraise(tp, value, tb=None):
try:
if value is None:
value = tp()
if value.__traceback__ is not tb:
raise value.with_traceback(tb)
> raise value
/usr/local/lib/python3.7/site-packages/six.py:693:
`
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f4333fb0908>
response = {'status': 500, 'value': '{"value":{"error":"unknown error","message":"Reached error page: about:neterror?e=connection...tate@chrome://marionette/content/listener.js:277:21\\nhandleEvent@chrome://marionette/content/listener.js:245:9\\n"}}'}
`
再往下我也看到了
E selenium.common.exceptions.WebDriverException: Message: Reached error page: about:neterror?e=connectionFailure&u=http%3A//127.0.0.1%3A5000/shutdown&c=UTF-8&f=regular&d=Firefox%20can%E2%80%99t%20establish%20a%20connection%20to%20the%20server%20at%20127.0.0.1%3A5000.
/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py:242: WebDriverException
我阅读了这个问题Selenium WebDriverException: Reached error page 并遵循了将 localhost 更改为 127.0.0.1 的建议,但我没有看到测试行为有任何变化。我还将端口从 5000 更改为 3000,因为我在 3000 上本地有 Web 应用程序,但这也没有改变任何东西。
谁能明白为什么这个测试在本地运行时的行为与在 Travis CI 构建中的行为不同?谢谢。
【问题讨论】:
标签: python selenium docker travis-ci pytest