如何从自动完成文本框的自动建议中获取文本?

问题描述 投票:0回答:3

我的要求是我想从自动完成文本框中的自动建议中选择特定名称

所以在这里我只知道如何通过使用鼠标向下来获取名称来实现这一点但我知道这不是一个很好的解决方案,因为我们不保证自动建议与中的所有时间相同浏览器。

所以,如果有人知道如何使用 Junit 获取 Selenium Web Driver 中自动完成文本框的自动建议文本名称(这里我使用 Selenium WebDriver 中的 Junit 来开发自动化测试脚本)。

我的代码:

driver.findElement("//input[@id='phSearchInput']").SendKeys(KEYS.ARROW_DOWN);
Thread.sleep(1000);
driver.findElement("//input[@id='phSearchInput']").SendKeys(KEYS.ARROW_DOWN);
Thread.sleep(1000);
driver.findElement("//input[@id='phSearchInput']").SendKeys(KEYS.ENTER);

上面的代码仅适用于我的正确选项,显示为 自动建议文本的第二个选项。

这就是为什么我需要如何获取自动完成文本框的自动建议中的文本名称。

请以 JUnit 形式给出我的问题的解决方案,因为我正在使用 JUnit 来开发自动化测试脚本。

谢谢

enter image description here

java selenium selenium-webdriver junit browser-automation
3个回答
1
投票

自动建议框与页面上的其他内容一样都是 HTML。创建一个定位器来查找自动建议面板,然后解析内容。一旦弄清楚结构,您就可以获得所需的文本,然后断言它是正确的。

我无法从您的屏幕截图中看到完整的 HTML,但您可以看到该列表包含在 HTML UL 中。 UL 是容器,每个 LI 是下拉列表中的一个列表项。您可以使用该信息来做类似的事情

ul.autoCompleteGroup > li

获取所有列表项。我看不到里面有什么,但在某些时候您应该能够使用

.getText()
来获取自动建议项目。从那里,您只需将列表中的内容与您期望的断言进行比较即可。


1
投票

请尝试以下代码

public void selectAutoCompleteItem(String itemText) {
    String xpathPattern = "//div[@id='phSearchInput_autoCompleteBoxId']" +
                          "//ul/li/a[.='%s')]";

    String xpathExp = String.format(xpathPattern, itemText);

    driver.findElement(By.xpath(xpathExp)).click();
}

0
投票

在这种情况下,您可以使用 findelements 功能。所以你可以说:

List<WebElement> elements = driver.findElements(by.xpath("//a[@class='autoCompleteRowLin‌​k']"); 

然后对于 每个列表项都可以使用 getText 来获取确切的文本。然后你可以用预期值断言它

© www.soinside.com 2019 - 2024. All rights reserved.