我正在尝试在自动测试中实现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
分离定位器并正确使用它们的最佳方法是什么?
答案 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")
希望这对您有帮助!