为什么元组解包在Selenium WebDriverWait预期条件中不生效?
Selenium WebDriverWait 元组解包问题解答
报错的核心原因
问题本质是expected_conditions下的判断方法和find_element的参数规则不同:
find_element的方法签名要求接收两个独立的位置参数:find_element(by: By, value: str),你用*解包二元元组,刚好对应两个入参,语法完全合法。EC.presence_of_element_located这类等待条件方法的入参要求是单个二元元组,也就是参数本身就要是(by, value)的结构,不需要提前解包。你原来的写法EC.presence_of_element_located(*Test.editprofile_button)相当于把元组拆成两个独立参数传给这个方法,会因为参数数量不匹配抛出异常。
正确的元组使用写法
你不需要额外做解包操作,直接把定义好的定位元组传入等待条件即可:
def profile_page_should_be_visible(self): wait = WebDriverWait(self.driver,20) # 直接传入元组即可,不需要解包 wait.until(EC.presence_of_element_located(Test.editprofile_button)) assert self.driver.find_element(*Test.editprofile_button).is_displayed()
这种写法和你改写后手动写两层括号的效果完全一致,你手动写的((By.XPATH, "//android.widget.TextView[@text=\"Edit profile info\"]"))本质就是把二元元组作为单个参数传入等待方法。
内容的提问来源于stack exchange,提问作者Aurimas
相关产品推荐
相关产品推荐

