我正在尝试自动执行“ 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;
}
}
}
}
答案 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的屏幕截图:
答案 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'));