测试人社区

Webdriver封装元素查找方法时,在方法中加入WebDriverwait显示等待,运行时报错,提示参数传入错误,具体报错:__init__() takes 2 positional arguments but 3 were given

背景:对webdriver元素查找方法进行封装(find方法),刚开始没有加入等待,运行时出现元素未加载出来,然后未找到元素就报错了… 就想着在find方法加入显示等待来解决这个问题,但是加入显示等待之后,运行就一直报错
代码:

    def find(self, locator) -> WebElement:
        #todo:查找元素时增加对弹窗的处理,及异常处理
        try:
            return  self.driver.find_element(*locator)
        except Exception as e :
            if BasePage.max > 3:
                raise e
            BasePage.max +=1
            # black_list1 = tuple(self.black_list)
            for black in self.black_list:
                # sleep(3)
                WebDriverWait(self.driver, 60).until(expected_conditions.visibility_of_element_located(*black))
                elements = self.driver.find_elements(*black)
                if len(elements) >= 1:
                    elements[0].click()
            return self.find(locator)

报错代码:WebDriverWait(self.driver, 60).until(expected_conditions.visibility_of_element_located(*black))
报错原因分析:visibility_of_element_located类的构造方法只有两个参数,但调用时传入一个元组,被识别成输入了三个参数(有一个参数是self,方法将我传入的元组,识别成两个参数了),然后就报错了…
image
针对上述元素未加载成功,查找失败的问题,目前解决方法是在元素查找前加了sleep等待 :joy:
本人是菜鸟,不知怎么解,还请各位大佬支支招… :pleading_face:

使用反引号把代码的部分格式化一下
image

代码已经格式化了.

问题已解决,解决方式:WebDriverWait(self.driver, 60).until(expected_conditions.visibility_of_element_located(black)),去掉black前的号。参数前加 * 会将参数进行解压,传入的是2位的元组,解压之后就成了两个参数.

:+1:
很优秀自己解决问题。下次记得代码要加格式啦