切换到无法在HtmlUnit驱动程序中使用的框架

时间:2018-12-18 06:23:16

标签: java selenium driver

我正在使用HtmlUnit驱动程序,但是我的代码可以在Firefox或chrome上使用,但是当我开始使用HtmlUnit驱动程序时,它可以工作到一定程度,但之后又停留在使用driver.switchTo()的那一行。 frame(“ Big”);

我引用了以下链接,但不确定为什么它不起作用

.switchTo().frame(<'frameId'>); not working with HtmlUnit Driver

https://sqa.stackexchange.com/questions/15309/selenium-htmlunit-how-do-i-disable-js-errors

下面是我尝试过的。

CustomHtmlUnitDriver.java

    public class CustomHtmlUnitDriver extends HtmlUnitDriver {
 @Override
    protected WebClient modifyWebClient(WebClient client) {
        WebClient modifiedClient = super.modifyWebClient(client);
        modifiedClient.getOptions().setThrowExceptionOnScriptError(false); // see here
        modifiedClient.getOptions().setJavaScriptEnabled(true);
        return modifiedClient;
    }
}

Startup.java

  static CustomHtmlUnitDriver driver = new CustomHtmlUnitDriver();
    Thread.sleep(3000);
    driver.manage().window().maximize();
     ---
   /*some working  code */
   driver.switchTo().frame("Big");
  /*and then the error as below*/

错误为

  

org.openqa.selenium.NoSuchFrameException:无法找到带有   名称或ID:大版本信息:版本:“ 3.13.0”,修订版:“ 2f0d292”,   时间:'2018-06-25T15:24:21.231Z'系统信息:主机:'CPU-38',IP:   '000000',os.name:'Windows 8',os.arch:'x86',os.version:'6.2',   java.version:'1.8.0_171'驱动程序信息:driver.version:未知   org.openqa.selenium.htmlunit.HtmlUnitDriver $ HtmlUnitTargetLocator.frame(HtmlUnitDriver.java:1507)

1 个答案:

答案 0 :(得分:0)

我想到了两个可能的原因

  1. modifiedClient.getOptions()。setThrowExceptionOnScriptError(false);这意味着您将忽略js错误。而且HtmlUnit js支持在某些方面不是完美的,可能是js函数在此函数(或从该函数调用的函数)之前失败了,因此,框架永远不会被创建。请检查您的日志,也许有提示。
  2. 框架是由异步js创建的;也许您必须在最后一个工作步骤之后等待,直到创建框架。在客户端上使用waitForBackground ...可以增加一些等待时间。

如果您要查找的框架是普通HTML响应的一部分(使用诸如Charles之类的工具查看您的浏览器和服务器之间的实际情况),则可能是HtmlUnit / WebDriver中的错误。

请提供完整的工作示例,以使我们有机会重现/调试问题。