等待第N个元素的可见性

问题描述

我正在使用等待元素功能可见性的操作,然后单击该元素。但是,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')]定位的所有元素中的第三个元素被加载

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...