Нажатие динамического выпадающего div с Selenium в Java - PullRequest
0 голосов
/ 08 июля 2019

У меня проблемы с указанием xpath первого элемента из динамически сгенерированного выпадающего списка. Я бы хотел, чтобы Selenium щелкнул первое предложение из выпадающего списка на этой веб-странице после добавления текста. Однако, как я хочу найти это приводит к NoSuchElementException. Мой код:

public static void printTickets() throws IOException {
    System.setProperty("webdriver.chrome.driver", CHROMEDRIVER_PATH);
    WebDriver driver = new ChromeDriver();
    driver.get("https://bilkom.pl/");

    // hide iframe
    WebElement closeFrameButton = driver.findElement(By.xpath("//div[@class='modal-body']//button[@class='close']"));
    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.elementToBeClickable(closeFrameButton));
    closeFrameButton.click();

    // fill first field
    WebElement textInput = driver.findElement(By.xpath("//input[@id='fromStation']"));
    textInput.sendKeys("Warszawa");
    String firstElementXPath = "//div[@id='fromStation-cg']//div[@class='tt-dataset']//div[1]";
    WebElement firstElementDiv = driver.findElement(By.xpath(firstElementXPath)); //NoSuchElementException
    firstElementDiv.click();
}

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Проблема с вашим кодом - это указанный вами xpath. Нет никаких < div class="tt-dataset"> Метка показывается для любых предложений, которые вы получаете после любого поиска

<div class="tt-station tt-suggestion tt-selectable">

Для выбора первого предложения вы можете использовать findElements.

WebElement textInput = driver.findElement(By.xpath("//input[@id='fromStation']"));
textInput.sendKeys("Warszawa");
List<WebElement> suggestionList = driver.findElements(By.xpath("//div[@class='tt-station tt-suggestion tt-selectable > span > i']"));
suggestion.get(0).click();

Если вы хотите щелкнуть по любому другому элементу, вы можете указать порядковый номер в соответствии с вашими потребностями.

1 голос
/ 08 июля 2019

Попробуйте с помощью приведенного ниже xpath выбрать 1-й элемент из динамического списка.

(//div[@id='fromStation-cg']//div[@class='tt-station tt-suggestion tt-selectable']//span)[1]

Проверил приведенный ниже фрагмент кода, который работает должным образом.

// fill first field
    WebElement textInput = driver.findElement(By.xpath("//input[@id='fromStation']"));
    textInput.sendKeys("Warszawa");
    Thread.sleep(5000);
    String firstElementXPath = "(//div[@id='fromStation-cg']//div[@class='tt-station tt-suggestion tt-selectable']//span)[1]";
    WebElement firstElementDiv = driver.findElement(By.xpath(firstElementXPath)); //NoSuchElementException
    wait.until(ExpectedConditions.elementToBeClickable(firstElementDiv));
    System.out.println(firstElementDiv.getText());
    firstElementDiv.click();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...