Selenium тестирует ошибки при локальном запуске в среде разработки (достигнутая страница ошибок: about: neterror? E = connection), но не работает в Travis CI - PullRequest
0 голосов
/ 25 февраля 2019

Тест Selenium, который завершается с ошибкой Travis CI при локальном запуске в среде разработки.Я получаю сообщение об ошибке, в котором говорится, что Firefox не может установить соединение с сервером на локальном хосте.Я пытаюсь запустить тест и выполнить его локально, чтобы я мог отладить его, не прибегая к сборке Travis CI.Я работаю над веб-приложением Python-Flask, которое использует док-контейнеры для веб-приложения и базы данных 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: достигнуто сообщение об ошибке и последовал совету изменить localhost на 127.0.0.1, но я не увидел никаких изменений в поведении теста.Я также изменил порт с 5000 на 3000, потому что у меня локальное веб-приложение на 3000, но это тоже ничего не изменило.

Кто-нибудь может понять, почему этот тест при работе локально работает иначе, чем вТрэвис CI построить?Благодаря.

1 Ответ

0 голосов
/ 25 февраля 2019

Ошибка от Travis CI была ясной и краткой.Ошибка в строке:

images_button = browser.find_element_by_class_name("btn btn-primary")

find_element_by_class_name(name) принимает одно имя класса в качестве аргумента, в то время как вы передали два имени класса btn и btn-primary.

Решением будет использование любой из следующих Стратегий локатора :

  • css_selector:

    images_button = browser.find_element_by_css_selector(".btn.btn-primary")
    
  • xpath:

    images_button = browser.find_element_by_xpath("//*[@class='btn btn-primary']")
    

Ошибка вашего localhost немного субъективна, так как гласит:

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.

который указывает 500 Внутренняя ошибка сервера из-за Сетевая ошибка при инициализации WebDriver / Просмотр веб-страниц .Вы можете найти подробное обсуждение на странице Достигнутая ошибка: about: neterror при попытке перейти на другие вкладки, если под этой вкладкой есть форма для отправки

...