代码之家  ›  专栏  ›  技术社区  ›  Chaitanya Pujari

有机硒。NoSuchElementException:无法使用HtmlunitDriver/Pantomjs定位节点

  •  0
  • Chaitanya Pujari  · 技术社区  · 9 年前

    我正在使用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

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

    我尝试过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 回复  |  直到 9 年前
        1
  •  2
  •   aholt    9 年前

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

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

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

        2
  •  1
  •   Community CDub    7 年前

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

        3
  •  1
  •   Vishal Jagtap    9 年前

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

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

    所以,既然它不会来,你会得到 NoSuchElement异常 对于HtmlUnitDriver。

        4
  •  0
  •   Chaitanya Pujari    9 年前

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

    谢谢朋友们的帮助。