как поиск в Google с помощью динамического xpath? - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь автоматизировать поиск Google для "Java", и когда он предоставляет список, я хочу выбрать "вопросы интервью 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;
            }
        }
    }

}

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Не знаю, почему вам нужно перебирать все элементы списка, когда вы можете справиться с этим с помощью простого 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();
1 голос
/ 22 марта 2019

Я думаю, что вы используете недопустимый локатор 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

0 голосов
/ 22 марта 2019

Этот xpath представляется неверным.Я думаю, что было бы проще найти элементы с помощью css, используя их класс, например:

List<WebElement> list = driver.findElements(By.cssSelector('li.sbct'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...