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

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

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


幕布斯7119047
浏览 187回答 1
1回答

紫衣仙女

正如我所看到的错误:TypeError: init () 需要 2 个位置参数,但给出了 3 个意味着您需要向 中添加第三个参数__init()__:这是您当前的__init()__:def __init__(self, driver):    self.driver = driver    self.wait = WebDriverWait(self.driver, 20)正如您在问题中引用的selenium 页面对象,您可以在此处看到它们有第三个参数(尽管并不总是使用 see 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")希望这对你有帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python