自动补硒

时间:2019-03-21 09:12:16

标签: java selenium selenium-webdriver autocomplete

我有一个列表,在每个部分下都有多个链接。每个部分都有不同的墨水,我需要单击每个部分下的特定链接。我已经编写了以下代码,但是执行时它给了我:陈旧的元素引用:元素未附加到页面文档。

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();
    }
}

1 个答案:

答案 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();
        }
    });
}

希望这对您来说足够清楚。