【问题标题】:How to execute JavaScript in Robot Framework如何在 Robot Framework 中执行 JavaScript
【发布时间】:2014-03-16 08:29:36
【问题描述】:

下面是我的代码。当我运行它时,它显示一个 WebDriverException。如何在 Robot Framework 中执行 JavaScript 代码?

这,return $(arguments[0]).data('${ToolTip}').options.title 代码在 -java Selenium 网络驱动程序中表现良好。

Mouse Over    ${CreateTask}
    Execute JavaScript    return $(arguments[0]).data('${ToolTip}').options.title

【问题讨论】:

    标签: selenium automated-tests selenium-webdriver robotframework


    【解决方案1】:

    来自http://rtomac.github.io/robotframework-selenium2library/doc/Selenium2Library.html#Execute%20Javascript

    请注意,默认情况下,代码将在 Selenium 对象本身,因此 this 将引用 Selenium 对象。采用 window 来引用您的应用程序的窗口,例如 window.document.getElementById('foo').

    所以

    Mouse Over    ${CreateTask}
        Execute JavaScript    return window.$(arguments[0]).data('${ToolTip}').options.title
    

    假设有一些库(最有可能是 jQuery)实际上理解 $ 简写。

    【讨论】:

    • 我遇到了同样的问题。
    • 你能分享给我们有问题的页面,或者至少是一个简化版本吗?你确定你的语法是正确的吗?看起来很奇怪。你能执行任何Javascript吗?您没有将 Execute Javascript 的输出存储到任何变量,这是故意的吗? ${ToolTip} 是否具有适当的价值?它来自哪里?
    • 是的,我能够执行 Execute JavaScript document.getElementsByName("create_button")[0].click() 和 ${ToolTip} xpath=//tr[2]/td[2]/跨度。 Webdriver 代码正常工作 JavascriptExecutor executor = (JavascriptExecutor) driver; String toolString = (String) executor.executeScript("return $(arguments[0]).data('//tr[2]/td[2]/span').options.title;", "//tr[ 2]/td[2]/span");
    • ${title}= 执行 Javascript 返回 $('//tr[2]/td[2]/span').data('//tr[2]/td[2]/跨度').options.title;
    【解决方案2】:

    arguments[0] 通常是指传递给脚本的参数。

    Selenium2Library 的 Execute JavaScript 调用 webdriver.execute_javascript 并且不向其传递任何参数。 arguments[0] 因此未定义。

    请参阅 Is there a way to provide arguments to "Execute JavaScript" in Robot Framework? 了解解决方法。

    【讨论】:

      【解决方案3】:

      使用以下选项中的任何一种方法

         Execute Javascript    document.getElementById('authUser').value='admin'
       
         ${ele}    Get WebElement    id=clearPass
         Execute Javascript    arguments[0].value='pass';     ARGUMENTS    ${ele}
          
         Execute Javascript    alert(arguments[0]);    ARGUMENTS    123 
         
         Execute Javascript    document.evaluate("//*[text()='Patients']",document.body,null,9,null).singleNodeValue.click();
          
         
         Execute Javascript    document.querySelector('[data-bind="click: changePassword"]').click();
         
         
         ${ele}    Get WebElement    //*[text()='Logout']
         Execute Javascript    arguments[0].click();     ARGUMENTS    ${ele} 
         

      【讨论】:

        猜你喜欢
        • 2020-12-09
        • 2020-11-23
        • 2017-07-05
        • 2016-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2021-07-17
        相关资源
        最近更新 更多