Selenium等到两个元素中的一个存在

时间:2016-03-05 10:33:31

标签: selenium selenium-webdriver

很多时候我希望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"      

3 个答案:

答案 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")))