I'm using selenium WebDriver syntax. I know, th开发者_Go百科at in selenium server-based syntax, you can fire an javascript event by doing:
Selenium selenium = new DefaultSelenium("localhost", server.getPort(),
"*iexplore", "http://www.eviltester.com");
selenium.fireEvent("lteq30", "blur");
how do I do the same in an application, created with WebDriver (for example, FirefoxDriver)?
Unfortunately the Selenium WebDriver designers explicitly decided not to include this functionality in Selenium 2.
It's a deliberate decision to not include this feature in WebDriver, since it's usually a hack to work around synthesized events not behaving properly. We'd rather eliminate this need by providing great support for native events, so we'll continue improving that going forward. A user would never fire a focus event, they would click the form control. That's what your tests should be doing as well.
With that said, you can execute any javascript code you want. Thus you should look into how to fire events with javascript. Take at look at this StackOverflow question for inspiration.
Then you can do something like this:
FirefoxDriver driver = new FirefoxDriver();
driver.ExecuteScript("[your fire event javascript code]");
I'm sure you could create a wrapper function to basically accomplish the same thing as fireEvent
.
Another solution:
((JavascriptExecutor) driver).executeScript("return document.getElementById('element').blur()");
精彩评论