7

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

4

4 回答 4

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 根据您告诉它执行的内容返回不同的内容,这可能非常棘手。

于 2012-01-06T18:02:35.993 回答
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 定位器获取)。另请参阅此问题

于 2010-07-28T16:42:59.597 回答
1

向 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 测试运行它就可以正常工作。

高温高压

山姆

于 2010-04-29T11:26:24.810 回答
1

我已经找到了这个问题的解决方案,并开发了一个简单的脚本来在运行测试时解决这个问题。问题在于您的浏览器的本机匹配和查询选择器是操作系统感知的,这意味着除非您的浏览器和网页选项卡在操作系统中具有焦点,否则 :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

希望对遇到同样问题的其他人有所帮助。

于 2011-08-23T23:06:12.853 回答