如何在Selenium RC中测试哪个元素具有焦点?
答案 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
希望能帮助那些有同样问题的人。