Java 如何使用动态xpath进行谷歌搜索?

Java 如何使用动态xpath进行谷歌搜索?,java,selenium,xpath,Java,Selenium,Xpath,我正在尝试自动化谷歌搜索“Java”,当它提供一个列表时,我想选择“Java面试问题”。 我尝试使用下面的xpath,但是脚本失败了 List<WebElement> list = driver.findElements(By.xpath("//ul[@role ='listbox']//li/descendent::div[@class='sbl1']")); List List=driver.findElements(By.xpath(“//ul[@role='listbox'

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

List<WebElement> list = driver.findElements(By.xpath("//ul[@role ='listbox']//li/descendent::div[@class='sbl1']"));
List List=driver.findElements(By.xpath(“//ul[@role='listbox']//li/degent::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;
            }
        }
    }

}
公共类谷歌搜索测试{
公共静态void main(字符串[]args){
System.setProperty(“webdriver.chrome.driver”,“C:/Users/User/Desktop/Selenium Drivers/chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
驱动程序。获取(“http://www.google.com");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15,TimeUnit.SECONDS);
driver.findElement(By.name(“q”)).sendKeys(“Java”);
List List=driver.findElements(By.xpath(//ul[@role='listbox']//li/degent::div[@class='sbl1']);
System.out.println(“搜索框中的建议总数:”+list.size());

对于(int i=0;i我认为您使用的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;
    }
}
driver.get(“http://www.google.com");
driver.findElement(By.name(“q”)).sendKeys(“Java”);
睡眠(1000);
List List=driver.findElements(By.xpath(//ul[@role='listbox']//li”);
System.out.println(“搜索框中的建议总数:”+list.size());

对于(int i=0;i,xpath似乎无效。我认为通过css使用它们的类来查找元素最容易,如下所示:

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

如果可以用简单的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();

很简单。xpath中有拼写错误。它的后代和非后代。 //ul[@role='listbox']//li/genderant::div[@class='sbtc']
使用Chropath,它会显示xpath何时无效

“正在失败”不是一个清晰的问题描述。请阅读并相应增强您的问题!提供了使用xpath的简单解决方案,请检查并告知我。@ChaitanyaMaligi您缺少了单击按钮的基本步骤,该按钮的文本为
Google Search
…没有搜索结果,您如何进行搜索?@DebanjanB-list.get(i).click()-在code@ChaitanyaMaligi不,您的问题标题是关于谷歌搜索的,但您的代码尝试和接受的答案是关于自动完成/自动建议的。
“//ul[@role='listbox]//li”
似乎也是无效的xpath。在开发控制台中尝试它会返回
bach18.1.js:570未捕获错误:Z
a
logicalAnd
bool
kt处的字符串(bach18.1.js:572)U处的字符串(bach18.1.js:573)uo处的字符串(bach18.1.js:767)uo处的字符串(bach18.1.js:570)at:1:1
请查看我更新的屏幕截图,我想知道为什么它对您不起作用?嗯。当您在“元素”选项卡上搜索时,它起作用,但在“控制台”选项卡上搜索时却不起作用。我想知道为什么?(删除下一票)