Автозаполнение селена - PullRequest
0 голосов
/ 21 марта 2019

У меня есть список, в котором есть несколько ссылок под каждым разделом.В каждом разделе есть разные чернила. Мне нужно щелкнуть определенную ссылку под каждым разделом.Я написал код ниже, но когда он выполняется, он дает мне: ссылка на устаревший элемент: элемент не прикреплен к документу страницы.

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 голосов
/ 21 марта 2019

вы можете использовать:

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

forEach получит каждую ссылку из вашего списка и будет делать с каждой, что у вас есть, между этими скобками.В этом случае условие if.

Для второй части вы также можете использовать foreach.Вы также можете установить ожидание для каждой из них, поэтому для каждой ссылки она будет ждать определенное время.

Если вы хотите использовать лямбды, вам нужна 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();
        }
    });
}

Надеюсь, это достаточно ясно для вас.

...