Я пытаюсь реализовать модель POM в своих автотестах, и у меня проблема с разделением локаторов в другой файл. Я использую это как руководство https://selenium-python.readthedocs.io/page-objects.html
Мой объект страницы
from Locators.Sites.SitesLocators import SitesLocators
class ResetPasswordFirstForm(object):
def __init__(self, driver):
self.driver = driver
self.wait = WebDriverWait(self.driver, 20)
def button_go_to_reset_passwrod(self):
self.driver.find_element(*SitesLocators.button_go_to_reset_password).click()
def button_submit_form(self):
self.driver.find_element(*SitesLocators.button_submit_reset_password).click()
Мои локаторы
class SitesLocators(object):
button_go_to_reset_password = (By.CSS_SELECTOR, "a[href='#/reset-password']")
button_submit_reset_password = (By.CSS_SELECTOR, "[ng-click='send()']")
Но я получаю эту ошибку
TypeError: __init__() takes 2 positional arguments but 3 were given
Как лучше всего разделить мои локаторы и правильно их использовать?
При первом использовании локатора self.driver.find_element (* SitesLocators.button_go_to_reset_p assword) .click ()
вы пытались изменить имя элемента или имя функции, вы не должны использовать то же имя ... button_go_to_reset_passwrod
Да, уже заметил, не помогло






Как я вижу, Ошибка:
TypeError: init() takes 2 positional arguments but 3 were given
Значит, вам нужно добавить к __init()__ третий аргумент:
Это ваш текущий __init()__:
def __init__(self, driver):
self.driver = driver
self.wait = WebDriverWait(self.driver, 20)
Как вы процитировали в своем вопросе объекты страницы селена, вы можете увидеть здесь, что у них есть третий аргумент (хотя не всегда используется, см. owner).
Так что просто добавьте третий, он должен помочь!
Как вы можете видеть здесь:
def __get__(self, obj, owner):
"""Gets the text of the specified object"""
driver = obj.driver
WebDriverWait(driver, 100).until(
lambda driver: driver.find_element_by_name(self.locator))
element = driver.find_element_by_name(self.locator)
return element.get_attribute("value")
Надеюсь, это вам поможет!
но как мне инициализировать «владельца» и где он используется ?. В примерах, где класс базовой страницы только с двумя переменными в init, self и driver, а где любой третий agrument joxi.ru/52a73Vlh4KvW5r Вы можете написать, как должен выглядеть мой init, я не понимаю, ty
@NiPa, как вы можете видеть на картинке, которую вы отправили ... BasePageElement унаследован от объекта SearchTextElement. инициализируем в MainPage
в какой строке вы получаете ошибку?