从动态生成的下拉列表中指定第一个元素的xpath时遇到问题。我希望Selenium在输入一些文本之后,从this webpage的下拉列表中单击第一个建议。但是,我要找到它的方式导致了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();
}
答案 0 :(得分:1)
尝试使用下面的xpath从动态列表中选择第一项。
(//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();
答案 1 :(得分:1)
您的代码存在的问题是您提供的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();
如果要单击任何其他元素,可以根据需要提供索引号。