0

我正在使用 HTMLUnitDriver。无法找到 xpaths 和 css 选择器

WebDriver d=new HtmlUnitDriver();
WebDriverWait wait = new WebDriverWait(d, 10);
// d.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
d.get("http://www.google.com");
//d.manage().window().maximize();
d.findElement(By.name("q")).sendKeys("flipkart");
d.findElement(By.name("btnG")).click();
Thread.sleep(5000);
String s1 = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='rhs_block']/ol/li/div[1]/div/div[1]/ol/li[2]/div/div[1]"))).getText();
//String s1=d.findElement(By.cssSelector("div.kno-ecr-pt.kno-fb-ctx")).
Assert.assertEquals(s1,"Flipkart");
System.out.println(s1);
d.close();
d.quit();

它适用于所有浏览器,但不适用于 HTMLUNITDRIVER

我读了一些帖子说我们需要等待我尝试了硒中所有可能的等待。

我尝试过使用 PhantomJS,但遇到了相同的 Unable to locate xpath 问题。

File file = new File("C:/jars/phantomjs-2.0.0-windows/bin/phantomjs.exe");             
System.setProperty("phantomjs.binary.path", file.getAbsolutePath());        
WebDriver d = new PhantomJSDriver(); 

//WebDriver d=new HtmlUnitDriver();
WebDriverWait wait = new WebDriverWait(d, 10);
d.get("http://www.google.com");
//  d.manage().window().maximize();
d.findElement(By.name("q")).sendKeys("flipkart");
d.findElement(By.name("btnG")).click();
Thread.sleep(5000);
String s1 = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='rhs_block']/ol/li/div[1]/div/div[1]/ol/li[2]/div/div[1]"))).getText();
//String s1=d.findElement(By.cssSelector("div.kno-ecr-pt.kno-fb-ctx")).
Assert.assertEquals(s1,"Flipkart");
System.out.println(s1);
d.close();
d.quit(); 
4

4 回答 4

2

这是因为默认情况下 HTMLUnit 和 PhantomJS 的显示大小将呈现页面的移动版本(如果存在)。您可以通过显式设置驱动程序的显示大小来解决此问题:

driver.manage().window().setSize(new Dimension(1920, 1200));

其中 1920 是以像素为单位的窗口宽度,而 1200 是以像素为单位的窗口高度。将它们设置为您认为可以接受的任何值。

于 2015-08-04T14:27:11.270 回答
1

HtmlUnitDriver 可能对某些网站有问题。您的另一个选择可能是使用 PhantomJS。这是关于它们之间差异的讨论

于 2015-08-04T09:35:24.367 回答
1

当我们使用 HtmlUnitDriver 时,我们没有得到 rhs 块(出现在右侧的 Flipkart 信息部分)。我试图获取页面源(htmlunitdriver),发现它不包含 rhs 块的 html 标记。当我们使用 Firefox 驱动程序时,也会出现同样的情况。

可能是 rhs 块需要一些物理浏览器支持才能显示。(可能是,只是假设)。

因此,由于它没有到来,您将获得HtmlUnitDriver 的NoSuchElementException

于 2015-08-04T11:32:16.933 回答
0

我发现问题出在我使用 jar phantomjsdriver-1.1.0.jar 的 jar 上,我现在更改了 jar 的版本,phantomjsdriver-1.2.1.jar 工作得很好。

感谢朋友的帮助。

于 2015-08-05T12:03:00.220 回答