如何使用动态XPath进行Google搜索?

时间:2019-03-22 03:12:25

标签: java selenium xpath

我正在尝试自动执行“ Java”的Google搜索,当它提供列表时,我想选择“ Java面试问题”。 我尝试使用下面的xpath,但是脚本失败。

List<WebElement> list = driver.findElements(By.xpath("//ul[@role ='listbox']//li/descendent::div[@class='sbl1']"));

下面是我的相同代码-

public class GoogleSearchTest {

    public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver" , "C:/Users/User/Desktop/Selenium Drivers/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("http://www.google.com");
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

        driver.findElement(By.name("q")).sendKeys("Java");

        List<WebElement> list = driver.findElements(By.xpath("//ul[@role ='listbox']//li/descendent::div[@class='sbl1']"));
        System.out.println("Total no of suggestions in search box::" +list.size());

        for(int i=0; i<list.size();i++) {
            System.out.println(list.get(i));

            if(list.get(i).getText().contains("Java Tutorial")) {
                list.get(i).click();
                break;
            }
        }
    }

}

4 个答案:

答案 0 :(得分:1)

我认为您使用的是无效的xpath定位器,在识别和获取元素之前需要延迟一些时间,请尝试以下代码:

driver.get("http://www.google.com");

driver.findElement(By.name("q")).sendKeys("Java");
Thread.sleep(1000);

List<WebElement> list = driver.findElements(By.xpath("//ul[@role ='listbox']//li"));
System.out.println("Total no of suggestions in search box :: " +list.size());

for(int i=0; i<list.size();i++) {
        System.out.println(list.get(i));

        if(list.get(i).getText().trim().contains("java interview questions") || list.get(i).getText().trim().equalsIgnoreCase("java interview questions")) {
        list.get(i).click();
        break;
    }
}

下面是描述匹配xpath的屏幕截图:

enter image description here

答案 1 :(得分:1)

当可以使用简单的xpath处理时,不确定为什么要遍历所有列表项。这是对我有用的代码。

driver.get("http://www.google.com");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.findElement(By.name("q")).sendKeys("Java");
WebElement searchElement = driver.findElement(By.xpath("//div[@class='suggestions-inner-container']//span[.='java salon']"));
System.out.println(searchElement.getText());
JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript("arguments[0].click();",searchElement);
Thread.sleep(1000); // just added time to make sure you will see the page navigation is successful.
driver.quit();

答案 2 :(得分:0)

简单。您在xpath中有拼写错误。它的后代而不是后代。 // ul [@ role ='listbox'] // li / descendant :: div [@ class ='sbtc'] 使用Chropath,它会在xpath无效时向您显示

答案 3 :(得分:-1)

该xpath似乎无效。我认为最简单的方法是使用CSS使用CSS类来查找元素,如下所示:

List<WebElement> list = driver.findElements(By.cssSelector('li.sbct'));