有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java自动完成硒

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

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) 个答案

  1. # 1 楼答案

    你可以使用:

     List<WebElement> listOfLinks = driver.findElements(By.xpath("yourXpath"));
     listOfLinks.forEach(link -> {
         if (link.getText().equalsIgnoreCase("your text")) {
             link.click();
             }
         });
    

    forEach将从您的列表中获取每个链接,它将处理这些括号之间的所有链接。在这种情况下,if条件

    对于第二部分,您还可以使用foreach。你也可以为每个链接设置等待时间,这样每个链接都会等待一定的时间

    如果你想使用lambdas,你需要Java8

    编辑:在你得到我的信息后,我设法为你写了以下内容:

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

    希望这对你来说足够清楚