【问题标题】:org.openqa.selenium.NoSuchElementException: Unable to locate a node using HtmlunitDriver/Phantomjsorg.openqa.selenium.NoSuchElementException:无法使用 HtmlunitDriver/Phantomjs 定位节点
【发布时间】:2015-08-04 06:37:16
【问题描述】:

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

【问题讨论】:

  • HtmlUnitDriver 是一个假的浏览器,它不能处理javascript并且缺乏普通浏览器所具备的功能。
  • 你有没有截屏看看你是否在正确的页面上?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我正在使用 phantom js,我不知道我在哪里犯了错误,它可以识别 xpaths 吗? id 和 name 工作正常,但不是 xpath 或 css 选择器
    【解决方案3】:

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

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

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

    【讨论】:

    • 是的,我得到的解决方案不在写入屏幕上我最大化了窗口并尝试了其他一些应用程序,它工作正常 nw
    【解决方案4】:

    我发现问题出在我使用 jar phantomjsdriver-1.1.0.jar 的 jar 上,我现在更改了 jar 的版本,phantomjsdriver-1.2.1.jar 可以正常工作。

    感谢朋友的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多