Selenium 硒需要等待两种元素中的一种出现

Selenium 硒需要等待两种元素中的一种出现,selenium,selenium-webdriver,Selenium,Selenium Webdriver,很多时候,我希望webdriver等待这两个元素中的一个出现。通常,当我希望页面在某些情况下显示元素1或元素2时,就会发生这种情况。目前,我正在使用两次等待按顺序执行此操作,但由于需要等待两次,因此效率低下。有没有办法将这两种等待合并为一种?换句话说,我想等到元素1或元素2出现 try: element = WebDriverWait(self.browser, 15).until(EC.presence_of_element_located((By.ID, "elem1"))) el

很多时候,我希望webdriver等待这两个元素中的一个出现。通常,当我希望页面在某些情况下显示元素1或元素2时,就会发生这种情况。目前,我正在使用两次等待按顺序执行此操作,但由于需要等待两次,因此效率低下。有没有办法将这两种等待合并为一种?换句话说,我想等到元素1或元素2出现

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"      

未经测试,但您可以尝试以下内容

element = WebDriverWait(self.browser, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#elem1, #elem2")))
选择器中的逗号为或。

您可以使用lambda

WebDriverWait(driver,15).until(
    lambda driver: driver.find_elements(By.ID,"Id1") or driver.find_elements(By.ID,"Id2"))
你可以做一个手术

driverWait.until(ExpectedConditions.or(
    ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.something")),
    ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.anything"))));

如果您还隐式使用了_watin,请小心。每个lambda在返回前需要n秒。因此,如果您隐式调用了_wait15,然后尝试WebDriverWaitdriver,15.until,那么只会检查第一个lambda。这是正确的答案!这是如此简单,它的工作。