我要等待Selenium上的元素消失,但同时我必须确保所有元素都消失了。现在,是这样的:
element = WebDriverWait(driver, 30).until(
expected_conditions.element_to_be_clickable((By.XPATH, xpath))
)
is_clickable = WebDriverWait(driver, 30).until(
expected_conditions.invisibility_of_element_located((By.XPATH, layovers[0]))
)
is_clickable_2 = WebDriverWait(driver, 30).until(
expected_conditions.invisibility_of_element_located((By.XPATH, layovers[1]))
)
if is_clickable and is_clickable_2:
element.click()
layovers
列表中有两个以上的元素,它们将xpath存储为str
。
在这种情况下,我可以将它们全部合并为一个功能来检查元素的隐身性,而不是重复它们吗? (我的意思是,使 WebDriverWait 仅接受一个调用,而不定义另一个包装函数。)
答案 0 :(得分:0)
第一件事:
在编写WebDriverWait(driver, 30)
时,将创建一个Web驱动程序等待对象(显式等待)。
相反,您可以执行以下操作:
wait = WebDriverWait(driver,10)
,您可以在同一类中多次使用引用变量wait
。
您可以创建一个方法,该方法将使用 webdriverwait 引用,并可以根据需要通过 xpath 或定位器。
def my_method(wait, xpath):
wait.until(
expected_conditions.invisibility_of_element_located((By.XPATH, layovers[0]))
希望这会有所帮助。
答案 1 :(得分:0)
来自until_not(method, message='')
类的WebDriverWait方法调用驱动程序随附的方法作为参数,直到返回值为 False 。
由于您的用例是要在invisibility_of_element_located()
至xpath上等待多个条件,因此您可以同时考虑这两个Expected_condition:
WebDriverWait(driver, 30).until(expected_conditions.invisibility_of_element_located((By.XPATH, layovers[0])))
WebDriverWait(driver, 30).until(expected_conditions.invisibility_of_element_located((By.XPATH, layovers[1])))
使用 until_not()
方法通过 lambda
表达式在单个表达式内,如下所示:
WebDriverWait(driver,15).until_not(lambda driver: driver.find_element(By.XPATH,layovers[0]) and driver.find_element(By.XPATH,layovers[1]))
您可以在以下位置找到一些类似的相关讨论: