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

apa*_*ana 8 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"      
Run Code Online (Sandbox Code Playgroud)

小智 10

你可以做一个OR

driverWait.until(ExpectedConditions.or(
    ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.something")),
    ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.anything"))));
Run Code Online (Sandbox Code Playgroud)

  • 尝试了一下,在“or”处给了我一个语法错误,是否可能没有“or”方法 (4认同)

小智 8

你可以使用lambda

WebDriverWait(driver,15).until(
    lambda driver: driver.find_elements(By.ID,"Id1") or driver.find_elements(By.ID,"Id2"))
Run Code Online (Sandbox Code Playgroud)


Guy*_*Guy 7

未测试,但您可以尝试类似

element = WebDriverWait(self.browser, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#elem1, #elem2")))
Run Code Online (Sandbox Code Playgroud)

选择器中的逗号是OR.

  • 这是正确的答案!它是如此简单并且有效。 (4认同)