org.openqa.selenium.NoSuchElementException:无法使用HtmlunitDriver / Phantomjs定位节点

时间:2015-08-04 06:37:17

标签: java selenium-webdriver phantomjs htmlunit htmlunit-driver

我正在使用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,但遇到了无法找到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 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

HtmlUnitDriver可能与某些网站有问题。您的另一个选择可能是使用PhantomJS。 Here's a discussion about the differences between them

答案 2 :(得分:1)

当我们使用HtmlUnitDriver时,我们没有得到rhs块(右侧显示的flipkart信息部分)。我试图获取页面源(htmlunitdriver)并发现它不包含rhs块的html标记。当我们使用firefox驱动程序时,情况也会如此。

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

因此,由于它没有到来,你得到HtmlUnitDriver的 NoSuchElementException

答案 3 :(得分:0)

我发现问题在于我正在使用jar我正在使用jar phantomjsdriver-1.1.0.jar我已经更改了jar的版本现在是phantomjsdriver-1.2.1.jar工作得很好。

感谢帮助朋友。