为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯7119047 2021-10-10 15:32:08
我正在尝试在我的自动测试中实现 POM 模型,但我在将定位器分离到另一个文件时遇到了问题。我用这个作为指南 https://selenium-python.readthedocs.io/page-objects.html我的页面对象from Locators.Sites.SitesLocators import SitesLocatorsclass 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 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

正如我所看到的错误:


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")

希望这对你有帮助!


查看完整回答
反对 回复 2021-10-10
  • 1 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信