Отдельные локаторы от классов объектов страниц Python Selenium - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь внедрить модель POM в свои автотесты, и у меня проблема с разделением локаторов для другого файла. Я использую это как руководство https://selenium -python.readthedocs.io / страница-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

Каков наилучший способ отделить мои локаторы и правильно их использовать?

1 Ответ

0 голосов
/ 13 января 2019

Как я вижу Ошибка:

TypeError: init () принимает 2 позиционных аргумента, но 3 получили

Означает, что вам нужно добавить третий аргумент в __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")

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...