gpt4 book ai didi

python-2.7 - Selenium Webdriver Python 页面对象 MainPageLocators 类为什么在类名前使用星号

转载 作者:行者123 更新时间:2023-12-03 22:25:36 24 4
gpt4 key购买 nike

我一直在跟踪 Python 中的 Selenium Webdriver 测试的页面对象模型。我遵循了 GitHub 上的示例。
网址是:https://github.com/baijum/selenium-python/blob/master/source/page-objects.rst

当您从 MainPageLocators 类调用定位器时,例如从 URL。

element = self.driver.find_element(*MainPageLocators.GO_BUTTON)

它在类名 *MainPageLocators 前使用星号。
为什么使用 * ?

如果您使用 MainPageLocators,它不起作用,您必须使用 *MainPageLocators。

这不好,因为当我使用 WebDriverWait 时,它不适用于 *MainPageLocators 或 MainPageLocators。
例如。
element = WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((*MainPageLocators.locator)))

我必须这样做才能使其工作,这违背了将定位器放在一个地方的目的。
element = WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.ID, 'button_id')))

为什么 MainPageLocators 前面有星号?
为什么 *MainPageLocators 在 WebDriverWait 中不起作用?
如果你这样做,它确实有效

self.driver.find_element(*MainPageLocators.locator)

但是如果你在 WebDriverWait 中使用它,它就不起作用

谢谢,
里亚兹

最佳答案

在这种情况下,*argument-unpacking operator .它告诉 Python 解压缩后面的序列中的值并将它们作为参数传递给函数。例如,

foo(*(1, 2, 3))

相当于
foo(1, 2, 3)

MainPageLocators.GO_BUTTON定义如下:
class MainPageLocators(object):
"""A class for main page locators. All main page locators should come here"""
GO_BUTTON = (By.ID, 'submit')

随之而来的是 find_element(*MainPageLocators.GO_BUTTON)相当于
find_element(By.ID, 'submit')

这自 find_element 起有效 expects 2 arguments .

相比之下, EC.element_to_be_clickable expects a single 2-tuple as its argument .因此,您不想在此处使用参数解包运算符。相反,只需直接传递 2 元组:
wait = WebDriverWait(self.driver, 20)
element = wait.until(EC.element_to_be_clickable((By.ID, 'submit'))

或使用
element = wait.until(EC.element_to_be_clickable(MainPageLocators.GO_BUTTON)

关于python-2.7 - Selenium Webdriver Python 页面对象 MainPageLocators 类为什么在类名前使用星号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33435105/

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