我有一个列表,在每个部分下都有多个链接。每个部分都有不同的墨水,我需要单击每个部分下的特定链接。我已经编写了以下代码,但是执行时它给了我:陈旧的元素引用:元素未附加到页面文档。
driver.findElement(By.xpath("//*[@id=\"s2id_CountryId\"]/a")).click();
List<WebElement> link2 = driver.findElements(By.xpath("//*[@id=\"select2-drop\"]/ul//li[.]"));
for (int i = 0; i <= link2.size(); i++) {
if (link2.get(i).getText().equalsIgnoreCase("ALGERIA")) {
link2.get(i).click();
}
}
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.findElement(By.xpath("//*[@id=\\\"s2id_GlobalId\\\"]/a")).click();
List<WebElement> link = driver.findElements(By.xpath("//*[@id=\"select2-drop\"]/ul//li[.]"));
for (int i = 0; i <= link.size(); i++) {
if (link.get(i).getText().equalsIgnoreCase("BNZ (Global)")) {
link.get(i).click();
}
}
答案 0 :(得分:0)
您可以使用:
List<WebElement> listOfLinks = driver.findElements(By.xpath("yourXpath"));
listOfLinks.forEach(link -> {
if (link.getText().equalsIgnoreCase("your text")) {
link.click();
}
});
forEach将获取列表中的每个链接,并且将处理这些括号之间的所有内容。在这种情况下,为if条件。
对于第二部分,您也可以使用foreach。您还可以为每个链接添加等待时间,因此对于每个链接,它都会等待一段时间。
如果要使用lambda,则需要Java 8。
编辑:在您得到我的信息之后,我已经设法为您编写了此文件:
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver",".//src//browser//chromedriver.exe");
yourMethodName("xpathExample", "xPathListPathExample", "iWantToFindThis","theTextIWantToComplete");
}
private static void yourMethodName(String xPathOfTheElement,String xPathListPath, String theTextYouWantToFind, String theTextYouWantToComplete) throws InterruptedException {
driver.findElement(By.xpath(xPathOfTheElement)).sendKeys(theTextYouWantToComplete);
Thread.sleep(2000);
List<WebElement> listOfLinks = driver.findElements(By.xpath(xPathListPath));
listOfLinks.forEach(link -> {
if (link.getText().equalsIgnoreCase(theTextYouWantToFind)) {
link.click();
}
});
}
希望这对您来说足够清楚。