问题描述
我正在使用等待元素功能可见性的操作,然后单击该元素。但是,HTML中有多个元素可以满足我对元素使用的搜索,这就是我想要的方式。如何使用等待可见性来等待多个元素中的第N个元素变为可见?
例如,这是我的代码的一部分,其结果将是等待多个元素中第一个的可见性,然后单击它:
from selenium import webdriver
from selenium.webdriver.support.ui import webdriverwait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
wait = webdriverwait(driver,10)
Start_Element = wait.until(expected_conditions.visibility_of_element_located((By.XPATH,"//*[@class='start' and starts-with(text(),'7')]")))
Start_Element.click()
我希望能够仅等待第1,第2,第3等。Start_Element可见,然后单击它。
我知道,如果我只想单击第N个元素,则可以执行以下操作,其中最后的[n]决定我单击哪个元素:
driver.find_elements_by_xpath("//*[@class='start' and starts-with(text(),'7')]")[0].click()
但是,我不知道是如何将其合并到“等待可见性”函数中,以在单击第n个元素之前等待其可见性。
谢谢!
解决方法
您可以修改xpath来查找第n个元素,如下所示:
eleXpath = "(//*[@class='start' and starts-with(text(),'7')])["+str(3)+"]"
Start_Element = wait.until(expected_conditions.visibility_of_element_located((By.XPATH,eleXpath )))
Start_Element.click()
现在上面的代码将等待//*[@class='start' and starts-with(text(),'7')]
定位的所有元素中的第三个元素被加载