如何在Selenium RC中测试哪个元素具有焦点?

时间:2010-04-17 20:01:49

标签: selenium-rc

如何在Selenium RC中测试哪个元素具有焦点?

4 个答案:

答案 0 :(得分:6)

当我遇到同样的问题时,出于各种原因,没有其他答案对我有用。我最终做了以下(使用Java中的Selenium 2.0 WebDriver)。

WebDriver driver = new FirefoxDriver();
String elScript = "return document.activeElement;";

// Note that the executeScript call returns a WebElement, 
// so you can do quite a lot with the result.
WebElement focuseedEl  = (WebElement) ((JavascriptExecutor) driver).executeScript(elScript);

该评论澄清了我的困惑点:executeScript根据你告诉它执行的内容返回不同的东西,这可能非常棘手。

答案 1 :(得分:2)

我无法让:focus伪类想法发挥作用,不确定为什么 - 定位css=#search_input input.text匹配,但css=#search_input input.text:focus没有?但这对我有用:

self.assertEquals(self.se.get_element_index('dom=document.activeElement'),
     self.se.get_element_index('//input[@id="search-query"]'))

这是使用Python Selenium API,因此get_element_index()调用是核心Selenium命令列表的包装器。适应您的环境。它正在评估文档聚焦元素的元素索引(使用Javascript DOM定位器获得)和要测试焦点的元素的元素索引(使用XPath定位器获得)。另请参阅this question

答案 2 :(得分:1)

在向Selenium提供元素定位器时,您可以使用CSS选择器:http://release.seleniumhq.org/selenium-core/1.0/reference.html#locators

因此,您可以在选择器上使用:focus CSS伪类,仅在元素聚焦时匹配。

将其与verifyElementPresent操作以及类似以下内容的目标相结合:css=.yourclassname:focus。当然,用您的CSS类名替换yourclassname,或者使用其他CSS选择器之一;最重要的一点是:focus

请注意,这几乎肯定不适用于Selenium IDE Firefox插件。我想这是因为这个插件会有焦点。我无法让它在IDE中工作(测试总是失败),但是一旦我导出它并将其作为Java测试运行它就能正常工作。

HTH

萨姆

答案 3 :(得分:1)

我找到了解决这个问题的方法,并在运行测试时开发了一个简单的脚本来解决这个问题。问题在于浏览器的本机匹配和查询选择器是操作系统感知的,这意味着除非您的浏览器和网页选项卡在操作系统中具有焦点,否则:焦点选择器将不匹配文档中的任何项目。我在JQuery中找到了解决方法,这可以通过简单地强制JQuery使用Sizzle而不是使用浏览器的本机函数优化选择器查询来完成。

如果包含以下脚本https://gist.github.com/1166821在包含JQuery之前,那么您的Selenium测试将通过:focus tests。

要完整地了解问题,解决方案以及如何运行测试,请查看http://blog.mattheworiordan.com/post/9308775285/testing-focus-with-jquery-and-selenium-or

希望能帮助那些有同样问题的人。