#java #selenium #webdriver
#java #selenium #webdriver
Вопрос:
С помощью Selenium webdriver я пытаюсь выполнить поиск ‘Selenium’ в окне поиска Google, которое предоставляет автоматические предложения по нескольким текстам. Затем я пытаюсь щелкнуть один конкретный текст из списка автоматических предложений. Похоже, мой Xpath не работает.
Ниже приведен код, который я написал:
package com.initial.selenium;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class GoogleSearch {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver",
"C:\Users\Shahid\eclipse-
workspace\InitialSeleniumProject\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.google.com");
driver.findElement(By.xpath("//*[@name='q']")).sendKeys("selenium");
List < WebElement >
mylist=driver.findElements(By.xpath("//ul[@role='listbox']//li/descendant::div[@class='sbl1']/span"));
System.out.println(mylist.size());
for (int i = 0; i < mylist.size(); i ) {
System.out.println(mylist.get(i).getText());
if (mylist.get(i).getText().contains("Selenium Benefits")) {
mylist.get(i).click();
break;
}
}
}
Комментарии:
1. что значит не работает ?
2. Скрипт выдает 0 результатов
3. Вы пробовали webdriverwait?
4. @ShahidIslam используйте этот xpath — //ul[@class=’erkvQe’]//li и извлеките из него текст. он вернет текст span.
5. @Dhru ‘Soni: спасибо. Это сделало свое дело. Я все еще не понимаю, почему мой xpath не работал. Если вы можете, пожалуйста, указать на любую проблему с моим xpath, я был бы очень признателен.
Ответ №1:
Попробуйте это:
List<WebElement> options = new WebDriverWait(driver, 10).until(ExpectedConditions.numberOfElementsToBeMoreThan(By.xpath("//ul[@role='listbox']//li/descendant::span"), 0));
System.out.println("no. of suggestions:" options.size());
for(int i=0;i<options.size();i ) {
System.out.println(options.get(i).getText());
}
Ответ №2:
В этом случае ошибка, которую вы получаете (нулевой результат), вызвана тем, что элемент ul, на который вы ориентируетесь, не содержит никаких элементов.
Итак, в этом случае вы собираетесь изменить свою цель. Вместо того, чтобы делать:
ul[@role='listbox']
Выполните
li[@role='presentation']
И это приведет к
//li[@role='presentation']/descendant::div[@class='sbl1']/span
Который возвращает диапазон, который вы пытаетесь получить.
Комментарии:
1. С этим xpath скрипт выдает 1
2. Я все еще не могу найти, что не так с моим xpath. Однако ни один из предложенных xpath, включая мой, не обеспечивает желаемого результата. Я был бы признателен за любую другую помощь