gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:17:38 25 4
gpt4 key购买 nike

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

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

最佳答案

据我所知,错误:

TypeError: init() takes 2 positional arguments but 3 were given

意味着您需要向 __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")

希望这对您有帮助!

关于python - 将定位器与页面对象类分开 Python Selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54169160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com