Selenium FindElements 方法 Java
Selenium FindElements method Java
在我的项目中我使用findElement(By.linkText("")).click();
但在我使用的网页中,许多 link 具有相同的名称(顺便说一句,我只能使用 By.linktext)所以我想知道它可以在 link 之间导航同名
另外,当我使用 List<WebElement> h=driver.findElements(By.linkText("Years"));
并打印它时:
[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],
更新:
在我正在处理的页面中,每第二个 link 具有相同名称的文本都是我想去的地方,而且那些 link 除了它们的描述之外没有任何区别,例如:
link 1:
年
ABC(描述)
link 2:
年
XYZ(描述)
我可以以任何方式使用描述作为条件吗??
如果您观察输出:
[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],...]
所有元素的 linkText 为 Years。所以很明显你应该可以使用:
List<WebElement> h=driver.findElements(By.linkText("Years"));
但是,有时对某些元素调用 click()
会改变 DOM Tree and the saved elements within the list may turn into stale elements。
在这些情况下, as well as 。
因此,根据最佳实践,您可能希望在特定 linkTexts
上调用 click()
,因为有必要引发 。例如:
cssSelector
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("element_css"))).click();
xpath
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("element_xpath"))).click();
所以我找不到原始问题的解决方案,但至于更新后的问题,我只是迭代到我使用的列表的第二个元素:List h=driver.findElements(By.linkText("年"));
h.get(1).点击();
虽然如果我能得到搜索引擎
生成的所有链接的目的地URL会更有效率
在我的项目中我使用findElement(By.linkText("")).click();
但在我使用的网页中,许多 link 具有相同的名称(顺便说一句,我只能使用 By.linktext)所以我想知道它可以在 link 之间导航同名
另外,当我使用 List<WebElement> h=driver.findElements(By.linkText("Years"));
并打印它时:
[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],
更新: 在我正在处理的页面中,每第二个 link 具有相同名称的文本都是我想去的地方,而且那些 link 除了它们的描述之外没有任何区别,例如: link 1: 年 ABC(描述)
link 2: 年 XYZ(描述) 我可以以任何方式使用描述作为条件吗??
如果您观察输出:
[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],...]
所有元素的 linkText 为 Years。所以很明显你应该可以使用:
List<WebElement> h=driver.findElements(By.linkText("Years"));
但是,有时对某些元素调用 click()
会改变 DOM Tree and the saved elements within the list may turn into stale elements。
在这些情况下,
因此,根据最佳实践,您可能希望在特定 linkTexts
上调用 click()
,因为有必要引发
cssSelector
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("element_css"))).click();
xpath
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("element_xpath"))).click();
所以我找不到原始问题的解决方案,但至于更新后的问题,我只是迭代到我使用的列表的第二个元素:List h=driver.findElements(By.linkText("年")); h.get(1).点击(); 虽然如果我能得到搜索引擎
生成的所有链接的目的地URL会更有效率