python - 包装 Selenium "Expected Conditions"Python

标签 python selenium

我正在尝试使用自定义函数创建我自己的 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/

相关文章:

python - 不使用库在 Python 中计算 CRC32

python - 如何在 html 中单击 zebra datepicker 中的日期?

c# - 如何使用 Selenium 和 Firefox 自动下载可执行文件?

javascript - ElementClickInterceptedException : Message: element click intercepted Element is not clickable error clicking a radio button using Selenium and Python

python - 新创建的问题(JIRA 和 python)

Python:为什么当 a 是数组时,reversed(a)==reversed(a) 返回 False?

python - Pandas - 基于列中第一个字母的 GroupBy 值

python - 关于Python Flask "BuildError: Could not build url for endpoint '索引'。你的意思是 'main.index' 吗?”

java - Selenium getWindowHandles() 处理?

java - 从 Selenium Java 测试脚本到 MySQL 数据库的连接失败