Получаю ошибку MaxRetryError при проведении автотестов в Pycharm
Файл с тестами выглядит так:
from selenium import webdriver
from link import link2
from pages.main_page import MainPage
import time
browser = webdriver.Chrome()
page = MainPage(browser, link2)
login = "tomsmith"
password = "SuperSecretPassword!"
def test_correct_login():
page.open(link2)
page.prompt_usrnm(login)
page.prompt_psswrd(password)
page.confirm()
if page.check():
print("Login successful!")
else:
print("Incorrect login o password!")
page.close()
time.sleep(2)
def test_incorrect_login():
page.open(link2)
login = " rrr"
password = " rrr"
page.prompt_usrnm(login)
page.prompt_psswrd(password)
page.confirm()
if page.check():
print("Login successful!")
else:
print("Incorrect login o password!")
page.close()
Файл main_page
class MainPage(BasePage):
def confirm(self):
btn = self.browser.find_element_by_class_name("radius")
btn.click()
def prompt_usrnm(self, username):
self.username = username
user_name = self.browser.find_element_by_name("username")
user_name.send_keys(username)
def prompt_psswrd(self, psswrd):
self.psswrd = psswrd
password = self.browser.find_element_by_name("password")
password.send_keys(psswrd)
def check(self):
success = self.browser.find_element_by_class_name("subheader")
success_text = success.text
if success_text == "Welcome to the Secure Area. When you are done click logout below.":
return True
else:
return False
Файл basepage
class BasePage(object):
def __init__(self, browser, url, timeout = 10):
self.browser = browser
self.url = url
self.browser.implicitly_wait(timeout)
def open(self, url):
self.browser.get(self.url)
return self.browser
def close(self):
self.browser.quit()
return self.browser
Первый тест проходит удачно, второй падает. При этом не открывается окно браузера даже. Никак не могу понять, в чем дело. Приблизительно такой же код по сути через фикстуру но без использования page objects работает нормально.
import pytest
from selenium import webdriver
from link import link2
@pytest.fixture(autouse=True)
def browser():
print("\nstart browser for test..")
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get(link2)
yield browser
print("quit browser")
browser.quit()
return browser
#page = MainPage(browser, link2)
class TestLoginPage():
# вызываем фикстуру в тесте, передав ее как параметр
def test_correct_login(self, browser):
user_name = browser.find_element_by_name("username")
user_name.send_keys("tomsmith")
password = browser.find_element_by_name("password")
password.send_keys("SuperSecretPassword!")
btn = browser.find_element_by_class_name("radius")
btn.click()
success = browser.find_element_by_class_name("subheader")
success_text = success.text
assert success_text == "Welcome to the Secure Area. When you are done click logout below.", "Incorrect login!"
def test_incorrect_login(self, browser):
user_name = browser.find_element_by_name("username")
user_name.send_keys("tosmith")
password = browser.find_element_by_name("password")
password.send_keys("SuperSecretPassord!")
btn = browser.find_element_by_class_name("radius")
btn.click()
success = browser.find_element_by_class_name("subheader")
success_text = success.text
assert success_text == "Welcome to the Secure Area. When you are done click logout below.", "Incorrect login!"
в файле link лежит ссылка "http://the-internet.herokuapp.com/login"
На сколько я понял из продолжительного гугления, проблема может быть в том, что вызывается метод
self.browser.quit()
Однако в варианте с фикстурой данный метод не вызывает проблем. Задача стоит в том, чтобы организовать код через page object model, при этом чтобы после выполнения каждого теста окно браузера закрывалось, и открывалось новое для выполнения следующего. Собственно вопрос в том, как это сделать, чтобы тесты не падали после выполнения первого с данной ошибкой. Если есть возможность, объясните, как будто мне 5 лет, потому что это мой первый проект по написанию автотестов и в целом первый на питоне
собственно последние 2 строки из консольного лога ошибки (сам по себе он очень длинный, поэтому не включаю полностью):
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=53791): Max retries exceeded with url: /session/34ee3b1fe3fdf53b52113e5f385aa376/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000002A076986EE0>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))
venv\lib\site-packages\urllib3\util\retry.py:574: MaxRetryError