我想验证Google搜索结果是否包含特定文字。 以下是我的代码:
public static void main(String[] args) {
System.out.println("setting the driver path");
System.setProperty("webdriver.chrome.driver", "C:\\Users\\Arushi\\Desktop\\Arushi\\Selenium\\chromedriver_win32\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://google.com");
driver.manage().window().maximize();
WebElement textbox = driver.findElement(By.name("q"));
textbox.sendKeys("stack");
WebElement button = driver.findElement(By.name("btnG"));
button.click();
String bodyText = driver.findElement(By.tagName("body")).getText();
Assert.assertTrue("Text not found!", bodyText.contains("stackoverflow.com"));
但上面的代码没有给出正确的结果。 getText()方法获取页面的正文文本" google.com"而不是执行搜索后加载的页面。
我想知道两件事: 1.为什么上面的getText()从google.com获取正文 2.在Google搜索结果中搜索特定文本的正确方法是什么。
注意:我也尝试过driver.getPageSource()。contains()方法,但即便没有给出正确的结果。
答案 0 :(得分:2)
我会通过识别代表DOM上搜索结果的确切元素来攻击它,然后遍历搜索结果的每个实例以验证搜索词的文本。只需在整个页面中搜索某些文本,就会为不准确的结果提供一些机会。
通过查看Google搜索结果页面的DOM,我们可以看到每个搜索结果都位于类.rc
的节点中。具有类.r
和.s
的该节点的子节点分别代表结果名称和描述。
我假设您在此示例中要检查搜索字词的搜索结果名称,但您应该能够轻松地根据您的特定需求重构以下代码。
public static void main(String[] args) {
// First, let's declare our search term
private String searchTerm = "Selenium";
// Then, let's start our WebDriver and navigate to google
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
// Next, we'll execute the search
WebElement searchField = driver.findElement(By.name("q"));
searchField.sendKeys(searchTerm);
WebElement searchButton = driver.findElement(By.name("btnK"));
searchButton.click();
// Now, let's gather our search results
List<WebElement> results = driver.findElements(By.cssSelector(".r"));
// Finally, we'll loop over the list to verify each result link contains our term
for (int i = 0; i < results.size(); i++) {
Assert.assertTrue(results.get(i).getText().contains(searchTerm), "Search result validation failed at instance [ + i + ].");
}
}
您可能需要添加任何适当的等待。这也可以进一步调整,以确保在最终通过/失败之前评估每个结果,每个结果的完整输出与术语不匹配,但我将留给您实施。希望这对你来说是一个好的开始。