【问题标题】:Unable to initialize "document" in this code无法在此代码中初始化“文档”
【发布时间】:2012-06-30 00:04:12
【问题描述】:

我正在尝试使用 selenium 网络驱动程序从 java 调用 javascript 函数。

这里是代码

WebDriver driver = new FirefoxDriver();

driver.get("C:\\KIRAN\\TrialAndError.htm"); // The html page is loaded here

// Following is the way i am trying to run the javascript

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("javascript");

String script = "function getInputIds(param) {  
                          print(\"inside getInputIds\");    
                          var elems = document.form[0].elements;    
                          var length = elems.length;    
                          var arr = new Array();  
                          var match_found = 0;  
                          for (i = 0; i < elems.length; i++) {      
                               match_found = elems[i].id.match(/order_unit_line_rate_\\d+_unit/);       
                               if (match_found) {           
                                  arr.push(elems[i].id);        
                               }    
                           }    
                           print(elems[1].id);}";

engine.eval(script);

Invocable inv = (Invocable) engine; 

inv.invokeFunction("getInputIds", "Scripting!!" );

但这是我运行此代码时遇到的错误

inside getInputIdsException : javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "document" is not defined. (<Unknown source>#1) in <Unknown source> at line number 1

请帮助我通过初始化“文档”对象来运行这段代码。

如果可以返回数组“arr”,请告诉我是否可以在 javascript 之外的 java 文件中使用。

提前致谢 基兰

【问题讨论】:

    标签: java javascript selenium-firefoxdriver


    【解决方案1】:

    我试过了

    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("C:\\QA\\Selenium\\workspace\\Module-NewServiceOrder\\src\\momentum\\getInputIds.js","");
    

    这就是结果

    Exception : org.openqa.selenium.WebDriverException: null (WARNING: The server did not provide any stacktrace information)
    

    命令持续时间或超时:63 毫秒 构建信息:版本:'2.24.1',修订:'17205',时间:'2012-06-19 16:53:24' 系统信息:os.name:'Windows 7',os.arch:'amd64',os.version:'6.1',java.version:'1.7.0_03' 驱动程序信息:driver.version:RemoteWebDriver 会话 ID:e2a43e1d-0eec-4640-ac0f-d72a485d98f8

    我什至无法进入该功能

    【讨论】:

    【解决方案2】:

    我认为当驱动程序实例内置了ScriptEngine时,没有必要使用它。

    来自FAQ

    您可以通过将 WebDriver 实例转换为 JavascriptExecutor 来执行 Javascript。在 Java 中,这看起来像:

    WebDriver driver; // Assigned elsewhere
    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("return document.title");
    

    【讨论】:

    • 嗨 epascarello .. 感谢您的快速回复。我尝试了您在上述评论中给出的代码,但仍然没有运气:(这是我尝试过的 JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("C:\\QA\\Selenium\\workspace\\Module -NewServiceOrder\\src\\momentum\\getInputIds.js","");
    • 我还有一个问题。
    • @KiranKoundinya 您应该插入脚本,而不是文件名。如果要从文件加载脚本,请使用 Apache Commons IO 的 FileUtils.readFileToString() 或 Guava 的 Files.toString()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2015-01-28
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    相关资源
    最近更新 更多