在我的项目中,我使用findElement(By.linkText("")).click();
但在我使用的网页中,许多链接都有相同的名称(顺便说一句,我只能使用By.linktext(,所以我想知道在具有相同名称的链接之间导航是可能的
此外,当我使用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],
更新:在我工作的页面中,每两个同名的链接文本都是我想去的地方,而且这些链接除了描述之外没有任何区别,例如:链接1:年ABC(说明(
链接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],...]
所有元素的链接文本均为年份。所以显而易见,你应该能够使用:
List<WebElement> h=driver.findElements(By.linkText("Years"));
但是,对某些元素调用click()
有时会更改DOM树,列表中保存的元素可能会变成过时元素。
在这些情况下,打印链接名称和断言都可能失败。
因此,根据最佳实践,您可能希望在引发WebDriverWait的必要性出现时,在特定的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("Years"(;h.get(1(.click((;尽管如果我能得到搜索引擎生成的所有链接的目的地URL,那将是非常有效的