Selenium 在 Python 中组合多个预期条件

Pra*_*rab 1 python selenium expected-condition

wait = (driver, 10)
wait.until(EC.presence_of_element_located((By.XPATH, '//td[@class="blah blah blah"]')))
wait.until(EC.visibility_of_element_located((By.XPATH, '//h1[text() = "yo yo"]')))
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以将这两个条件组合成一行,或者以任何方式表明如果这两个条件都为真,那么在 Selenium、Python 中只有 click() 。

小智 5

我遇到了同样的问题并找到了答案!您可以使用它EC.all_of(*expected_conditions)来检查多个预期条件,就像逻辑 AND 一样,或者EC.any_of(*expected_conditions)检查逻辑 OR。

所以代码会是这样的:

WebDriverWait(driver, 5).until(
    EC.all_of(
        EC.presence_of_element_located((By.ID, "Example")),
        EC.visibility_of_element_located((By.ID, "Example"))
    )
)
Run Code Online (Sandbox Code Playgroud)

它返回一个 webdriver 元素列表,因此如果您想单击某个元素,则必须通过索引选择它,并将其添加[i].click()到末尾。

这也意味着,如果您想单击正在检查的元素之外的第三个元素,您还必须将其添加到检查中,并选择它。最后会是这样的:

WebDriverWait(driver, 5).until(
    EC.all_of(
        EC.presence_of_element_located((By.ID, "Example")),
        EC.visibility_of_element_located((By.ID, "Example")),
        EC.presence_of_element_located((By.ID, "Clickable"))
    )
)[2].click()
Run Code Online (Sandbox Code Playgroud)