【问题标题】:How to Test Blur - Firefox Selenium driver?如何测试模糊 - Firefox Selenium 驱动程序?
【发布时间】:2012-09-02 10:55:42
【问题描述】:

我正在使用 selenium 2.24 Firefox Driver 来测试输入框的 blur 事件。目前,在我sendKeys 到一个输入框后,我让 selenium 单击另一个触发输入框模糊的区域。

但是,我认为这不是一个好方法,有人知道更好的测试方法吗?

非常感谢。

【问题讨论】:

  • 我不记得这是否适用于 onblur 事件,但请尝试 webElement.sendKeys(Keys.RETURN);
  • 如果您使用的是 C#,那么您可以在字符串末尾插入一个 tab 字符以发送到元素:ele.SendKeys("my string\t")
  • someelement.sendKeys("\t") 也适用于 Java,最短的解决方案

标签: selenium firefox selenium-firefoxdriver firefox-driver


【解决方案1】:

我做了一个小调查。我发现 selenium 2.0 不支持 fire 事件。见details。 所以这段代码对我有用:

 driver.get("http://www.onliner.by/");

        String cssSelctr= "div.b-top-search-box input[id=\"g-search-input\"]";
        WebElement testElement=driver.findElement(By.cssSelector(cssSelctr));
        testElement.sendKeys("fvsdfs");

        JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x = $(\'"+cssSelctr+"\');");
        stringBuilder.append("x.blur();");
        js.executeScript(stringBuilder.toString());

希望现在对您有所帮助)

【讨论】:

  • 不幸的是,使用该方法会导致异常:...... at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.openqa。 selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:188) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java: 472) 在 org.openqa.selenium.internal.seleniumemulation.JavascriptLibrary.callEmbeddedHtmlUtils(JavascriptLibrary.java:82) 的 org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:381)
【解决方案2】:

selenium WebDriver 无法正确触发模糊等事件。但是,您可以手动触发它们。假设您使用的是 jquery:

firefoxWebDriver.executeScript("$('#yourID').blur()");

或者没有jquery:

firefoxWebDriver.executeScript("document.querySelector('#yourID').blur()");

【讨论】:

  • 此方法也适用于 HtmlUnitDriver、ChromeDriver、SafariDriver 和 InternetExplorerDriver。
【解决方案3】:

将“elementId”替换为相关的元素 ID。这对我来说可以。 “驱动程序”是您的 Selenium 驱动程序

JavascriptExecutor jsexec = (JavascriptExecutor) 驱动程序; jsexec.executeScript("document.getElementById('" + elementId +"').onblur();");

【讨论】:

    【解决方案4】:

    感谢 eugene.polschikov。我不得不将函数更改为调用triggerHandler 以使其对我有用。请参阅以下内容 - 只需将“element-id”替换为您的元素的 id。

    JavascriptExecutor jsexec = (JavascriptExecutor) driver;
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("var x = $('" + element-id + "');");
    stringBuilder.append("x.triggerHandler('blur');");
    jsexec.executeScript(stringBuilder.toString());
    

    希望对你有帮助。

    【讨论】:

      【解决方案5】:

      某些元素没有适合测试目的的鉴别器(例如,您希望在测试中绑定的 id 或其他 CSS 选择器)。

      幸运的是,存在activeElement 的概念。因此,如果您希望测试元素的模糊功能,则可以使用原生 javascript 方式(不依赖于 jQuery 或类似方式)进行测试:

      driver.ExecuteScript("!!document.activeElement ? document.activeElement.blur() : 0");
      

      【讨论】:

        猜你喜欢
        • 2023-04-09
        • 2014-01-03
        • 2021-05-30
        • 2016-12-19
        • 2014-11-05
        • 2013-04-25
        • 1970-01-01
        • 2013-02-24
        • 1970-01-01
        相关资源
        最近更新 更多