将页面对象类中的定位器与Python Selenium分开

时间:2019-01-13 13:06:19

标签: python selenium automated-tests

我正在尝试在自动测试中实现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

分离定位器并正确使用它们的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我看到的是错误:

  

TypeError: init ()接受2个位置参数,但给出了3个

意味着您需要向__init()__添加第三个参数:

这是您当前的__init()__

def __init__(self, driver):
    self.driver = driver
    self.wait = WebDriverWait(self.driver, 20)

正如您在问题中引用的selenium page-objects所示,您可以看到here他们有第三个参数(尽管并不总是使用,请参见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")

希望这对您有帮助!