Mike
Mike

Reputation: 3575

How to Test Blur - Firefox Selenium driver?

I'm using selenium 2.24 Firefox Driver to test an input box's blur event. Currently, after I sendKeys to an input box, I let selenium to click another area which triggers the input box blur.

However, I think it is not a good way, anyone knows a better way to test this?

Many thanks.

Upvotes: 13

Views: 25967

Answers (5)

Aurand
Aurand

Reputation: 5537

The selenium WebDriver does not properly trigger events like blur. You can, however, manually trigger them. Assuming that you're using jquery:

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

Or without jquery:

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

Upvotes: 6

Ahmegen
Ahmegen

Reputation: 9

Thanks eugene.polschikov. I had to change the function to call triggerHandler to make it work for me. See the following - just replace "element-id" with the id of your element.

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

Hope it helps.

Upvotes: 1

Rich O'Kelly
Rich O'Kelly

Reputation: 41757

Some elements do not have a suitable discriminator for testing purposes (e.g. an id or another CSS selector that you'd like to be bound to in your tests).

Fortunately, the notion of an activeElement exisits. So, if the element's blur functionality is what you wish to test, a native javascript way (not reliant upon jQuery or similar) to test this is:

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

Upvotes: 7

Chamiz
Chamiz

Reputation: 54

Replace "elementId" with relevant element ID. It works fine for me. "driver" is your Selenium driver

JavascriptExecutor jsexec = (JavascriptExecutor) driver; jsexec.executeScript("document.getElementById('" + elementId +"').onblur();");

Upvotes: 0

eugene.polschikov
eugene.polschikov

Reputation: 7339

I've made a lil investigation. I found out that fire event is not supported in selenium 2.0. See details. So this piece of code worked for me:

 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());

Hope now this helps you)

Upvotes: 5

Related Questions