【问题标题】:How to fire JS event in selenium?如何在 selenium 中触发 JS 事件?
【发布时间】:2011-12-03 12:07:39
【问题描述】:

我正在使用 selenium WebDriver 语法。我知道,在基于 selenium 服务器的语法中,您可以通过以下方式触发 javascript 事件:

Selenium selenium = new DefaultSelenium("localhost", server.getPort(),
            "*iexplore", "http://www.eviltester.com");
selenium.fireEvent("lteq30", "blur");

如何在使用 WebDriver(例如 FirefoxDriver)创建的应用程序中执行相同操作?

【问题讨论】:

    标签: java selenium


    【解决方案1】:

    不幸的是,Selenium WebDriver 的设计者明确地decided not to include Selenium 2 中的这个功能。

    在 WebDriver 中不包含此功能是经过深思熟虑的决定, 因为解决合成事件通常是一种技巧,而不是 举止得当。我们宁愿通过提供出色的服务来消除这种需求 支持原生事件,因此我们将继续改进它 向前。用户永远不会触发焦点事件,他们会单击 表格控制。这也是你的测试应该做的。

    话虽如此,您可以执行您想要的任何 javascript 代码。因此,您应该研究如何使用 javascript 触发事件。看看this StackOverflow question 以获得灵感。

    然后你可以这样做:

    FirefoxDriver driver = new FirefoxDriver();
    driver.ExecuteScript("[your fire event javascript code]");
    

    我相信你可以创建一个包装函数来完成与fireEvent 基本相同的事情。

    【讨论】:

    • 在 JS 中运行 click() 事件会完成这项工作,还是我真的需要在代码中运行特定函数?如果是后者,那么在测试中引入这似乎是一种丑陋的依赖。
    • 我理解他们的决定,但是 .sendKeys() 应该触发 keyDown keyUp 更改事件,或者可能是 .sendKeyWithEvents()。否则无法触发基本事件。
    【解决方案2】:

    另一种解决方案:

    ((JavascriptExecutor) driver).executeScript("return document.getElementById('element').blur()");
    

    【讨论】:

    • 为什么会有return语句?没有回报就不行吗?
    • 功能不需要 return 语句。但是使用 return 语句,您也可以得到响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2017-12-20
    • 2022-06-28
    相关资源
    最近更新 更多