加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

包装Selenium“预期条件”Python

发布时间:2020-12-20 13:44:45 所属栏目:Python 来源:网络整理
导读:我正在尝试使用自定义函数创建自己的Selenium类,以便测试脚本在某些情况下会变得更直观和更健壮,至少我的口味.我目前的任务之一是包装所有Selenium预期条件(描述为 here),以便最终我将拥有一个看起来像这样的函数: def waitForElement(self,elementName,exp
我正在尝试使用自定义函数创建自己的Selenium类,以便测试脚本在某些情况下会变得更直观和更健壮,至少我的口味.我目前的任务之一是包装所有Selenium预期条件(描述为 here),以便最终我将拥有一个看起来像这样的函数:

def waitForElement(self,elementName,expectedCondition,searchBy)

哪里:

elementName – 我要查找的元素的名称.那可能是id,name,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,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,elementName)))

        . . .

所以它可以像这样调用:

self.waitForElement("elementName","NAME")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读