如何测试 Selenium RC 中哪个元素具有焦点?
4 回答
当我遇到同样的问题时,由于各种原因,其他答案都不适合我。我最终做了以下事情(使用 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 根据您告诉它执行的内容返回不同的内容,这可能非常棘手。
我无法让: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 定位器获取)。另请参阅此问题。
向 Selenium 提供元素定位器时可以使用 CSS 选择器:http ://release.seleniumhq.org/selenium-core/1.0/reference.html#locators
因此,您可以:focus
在选择器上使用 CSS 伪类来仅在元素获得焦点时进行匹配。
verifyElementPresent
将其与类似以下内容的操作和目标相结合: css=.yourclassname:focus
. 当然,替换yourclassname
为您的 CSS 类名称,或使用其他 CSS 选择器之一;重要的是:focus
最后。
请注意,这几乎肯定不会在 Selenium IDE Firefox 插件中工作。我想那是因为这个插件会有焦点。我无法让它在 IDE 中工作(测试总是失败),但是一旦我将它导出并作为 Java 测试运行它就可以正常工作。
高温高压
山姆
我已经找到了这个问题的解决方案,并开发了一个简单的脚本来在运行测试时解决这个问题。问题在于您的浏览器的本机匹配和查询选择器是操作系统感知的,这意味着除非您的浏览器和网页选项卡在操作系统中具有焦点,否则 :focus 选择器将不会匹配您文档中的任何项目。我在 JQuery 中四处寻找解决这个问题的方法,这可以通过简单地强制 JQuery 使用 Sizzle 而不是使用浏览器的本机函数优化选择器查询来完成。
如果在包含 JQuery 之前包含以下脚本https://gist.github.com/1166821 ,那么您的 Selenium 测试将通过 :focus 测试。
有关问题、解决方案以及如何运行测试的完整记录,请查看http://blog.mattheworiordan.com/post/9308775285/testing-focus-with-jquery-and-selenium-or
希望对遇到同样问题的其他人有所帮助。