我正在尝试使用自定义函数创建我自己的 Selenium 类,以便测试脚本在某些情况下会变得更直观、更健壮,至少对我来说是这样。我当前的任务之一是包装所有 Selenium 预期条件(描述 here ),以便最终我将拥有一个看起来像这样的函数:
def waitForElement(self, elementName, expectedCondition, searchBy)
地点:
elementName
- 我要查找的元素的名称。这可能是 id、名称、xpath、css 等...
expectedCondition
- 这是设置 Selenium 预期条件的地方。所以这可以是:element_to_be_clickable、visibility_of_element_located 等...
上述函数内部实现了标准的Selenium WebDriverWait
如下:
try:
if expectedCondition == "element_to_be_clickable":
element = WebDriverWait(self.driver, defaultWait).until(EC.element_to_be_clickable((searchBy, elementName)))
elif expectedCondition == "visibility_of_element_located":
element = WebDriverWait(self.driver, defaultWait).until(EC.visibility_of_element_located((searchBy, elementName)))
一切都很好,但我在将 searchBy
作为参数传递时遇到了一些麻烦。提醒一下,searchBy
可以是以下之一:
By.ID
By.NAME
By.CLASS_NAME
...
当我从主代码中调用这个包装器函数时,我使用下面的代码行:
self.waitForElement("elementName", "element_to_be_clickable", "By.NAME", "test")
所以所有参数都作为字符串传递,这对除了 searchBy
部分之外的所有内容都很好。
所以我的问题是:如何将 By.X
部分作为参数 传递给我的函数?
希望我能够很好地描述我的情况。如果我不是,我会很乐意澄清。
最佳答案
在询问this后,最终我能够解决这个问题。问题。因此,为了获得所需的功能,上述方法将如下所示:
def waitForElement(self, elementName, expectedCondition, searchBy):
try:
if expectedCondition == "element_to_be_clickable":
element = WebDriverWait(self.driver, self.defaultWait).until(EC.element_to_be_clickable((getattr(By, searchBy), elementName)))
elif expectedCondition == "visibility_of_element_located":
element = WebDriverWait(self.driver, self.defaultWait).until(EC.visibility_of_element_located((getattr(By, searchBy), elementName)))
. . .
所以可以这样调用:
self.waitForElement("elementName", "element_to_be_clickable", "NAME")
关于python - 包装 Selenium "Expected Conditions"Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25743277/