很多时候我希望webdriver等待两个元素之一的存在。通常情况下,当我期望页面在某些情况下显示element1或元素2时会发生这种情况。目前我正在使用两次等待顺序执行此操作,但由于我需要等待2次,因此效率很低。有没有办法把两个等待合二为一?换句话说,我想等到element1或element2出现。
try:
element = WebDriverWait(self.browser, 15).until(EC.presence_of_element_located((By.ID, "elem1")))
element.click()
return "elem1"
except:
print "failed to find elem1"
try:
element = WebDriverWait(self.browser, 5).until(EC.presence_of_element_located((By.ID, "elem2")))
return "elem2"
except:
print "sth wrong!"
raise Exception("Sth Wrong!")
return "Should not get here"
答案 0 :(得分:7)
你可以做一个OR
driverWait.until(ExpectedConditions.or(
ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.something")),
ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.anything"))));
答案 1 :(得分:6)
你可以使用lambda
WebDriverWait(driver,15).until(
lambda driver: driver.find_elements(By.ID,"Id1") or driver.find_elements(By.ID,"Id2"))
答案 2 :(得分:1)
未经测试,但您可以尝试类似
的内容<Text style={{}}> Test </Text>
选择器中的逗号为element = WebDriverWait(self.browser, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#elem1, #elem2")))
。