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

Java org.openqa.selenium.NoSuchElementException:无法使用HtmlunitDriver/Phantomjs定位节点,java,selenium-webdriver,phantomjs,htmlunit,htmlunit-driver,Java,Selenium Webdriver,Phantomjs,Htmlunit,Htmlunit Driver,我正在使用HTMLUnitDriver。它无法定位XPath和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.

我正在使用HTMLUnitDriver。它无法定位XPath和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

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

我尝试过使用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(); 

HtmlUnitDriver可能与某些网站存在问题。您的另一个选择可能是使用PhantomJS

HtmlUnitDriver可能与某些网站存在问题。您的另一个选择可能是使用PhantomJS

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

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


因此,由于它不会出现,您将得到HtmlUnitDriver的无接触元素例外。

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

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


因此,由于它不会出现,您将获得HtmlUnitDriver的NoTouchElementException

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

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

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

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

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

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

我发现问题出在jar上,我使用的是jar phantomjsdriver-1.1.0.jar。我现在已经更改了jar的版本,即phantomjsdriver-1.2.1.jar,它工作得非常好


感谢朋友们的帮助。

我发现问题出在jar上,我使用的是jar phantomjsdriver-1.1.0.jar,现在我已经更改了jar的版本,它是phantomjsdriver-1.2.1.jar,工作非常好


感谢朋友们的帮助。

HtmlUnitDriver是一款假的浏览器,它无法处理javascript,并且缺少普通浏览器所具备的功能。您是否拍摄了页面截图以查看您是否在正确的页面上?HtmlUnitDriver是一款假的浏览器,它不能处理javascript,并且缺少普通浏览器所具有的功能。您是否拍摄了页面的屏幕截图以查看您是否在正确的页面上?我使用的是phantom js我不知道我在哪里犯了错误。它是否识别XPath?id和名称工作正常,但不是xpath或css选择器我使用的是phantom js我不知道我在哪里犯了错误它能识别xpath吗?id和名称正常工作,但xpath或css选择器不正常是的,我得到的解决方案不在写屏幕上我最大化了窗口并尝试了其他应用程序它的工作正常是的,我得到的解决方案不在写屏幕上我最大化了窗口并尝试了其他应用程序它的工作正常