0

我的 HTML(不知何故)包含两个具有相同 ID 的元素。其中只有一个是可点击的,为了识别我想要点击的那个,我正在使用:

driver.find_elements_by_id('someID')[1]

现在我想将其转换为显式等待。如果只有一个元素具有该 ID(或任何选择器),我会这样做:

WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.ID, 'someID')))

如何转换该语句以识别具有该 ID 的第二个项目,而不是第一个?另一种方法是使用元素的完整 xpath,但我认为找到具有 ID 的第二个元素会更稳定。

4

1 回答 1

0

而不是element_to_be_clickable()您可以诱导WebDriverWait并且visibility_of_all_elements_located()您可以使用以下任一Locator Strategies

  • 使用ID

    WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.ID, "someID")))[1].click()
    
  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "#someID")))[1].click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//*[@id='someID']")))[1].click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
于 2020-07-23T19:53:15.217 回答