使用 Selenium Webdriver 测试某个元素是否获得焦点

发布于 12-06 11:49 字数 492 浏览 1 评论 0原文

我真的很惊讶我在互联网上找不到使用 Selenium Webdriver 测试元素焦点的参考资料。

我想检查当尝试提交表单但缺少必填字段时,焦点何时移至空字段。但我看不到任何使用 WebDriver API 执行此操作的方法。

我将能够使用 JavascriptExecutor。但是阅读FAQ 让我认为必须有某种方法使用驱动程序本身来执行检查。

感谢您的任何帮助。

I'm really surprised I can't find references on the internet to testing for element focus using Selenium Webdriver.

I'm wanting to check when when a form submission is attempted with a mandatory field missed, focus is moved to the empty field. But I cannot see any way to do this using the WebDriver API.

I will be able to find the focused element using a JavascriptExecutor. But reading the FAQ makes me think there must be some way to perform the check using the driver itself.

Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

格子衫的從容2024-12-13 11:49:48

driver.switchTo().activeElement() 将返回当前聚焦的 WebElementWebElement 定义了良好的相等性,因此您可以调用 element.equals(driver.switchTo().activeElement())

调用稍有误导性的 driver.switchTo().activeElement() 实际上不会切换焦点,driver.findElement() 也不会,因此您不需要 <代码>switchTo().defaultContent() 之后;事实上,这样做可能会模糊当前元素。

driver.switchTo().activeElement() will return the currently focused WebElement. Equality is well defined for WebElement, so you can call element.equals(driver.switchTo().activeElement()).

Calling the slightly misleading named driver.switchTo().activeElement() does not in fact switch focus, neither does driver.findElement(), so you do not need to switchTo().defaultContent() after; in fact, doing so would probably blur the current element.

清君侧2024-12-13 11:49:48
driver.switchTo().activeElement();

返回当前聚焦的元素。

确保在使用后切换回来。

driver.switchTo().defaultContent();

此外,如果没有焦点,则返回文档的 body

也看看这个问题。

在 Selenium 中如何找到“当前”对象

driver.switchTo().activeElement();

returns the currently focused element.

Makes sure you switch back after using

driver.switchTo().defaultContent();

Also if nothing is focused the body of the document is returned.

Take a look at this question as well.

In Selenium how do I find the "Current" object

妄断弥空2024-12-13 11:49:48

您可以使用选择器“dom=document.activeElement”找到活动元素。然后您可以断言它是否是您希望它成为焦点的元素。

You can find the active element using selector 'dom=document.activeElement'. Then you can assert whether it's the element you want it to be focused or not.

痴情2024-12-13 11:49:48

当您使用 Driver.FindElement 调用时,WebDriver 应该会更改焦点。因此,驱动程序上下文中的最后一个元素处于活动状态。

注意: 这会破坏任何动态注入的元素(例如 jQuery),因此您需要使用脚本路由。

The WebDriver is supposed to change focus when you use Driver.FindElement calls. So you're last element in the Driver context is active.

NOTE: This breaks for any elements injected dynamic (e.g. jQuery), so you'd need to go the script route then.

幸福不弃2024-12-13 11:49:48

@danielwagner-hall boolean bb = driver.switchTo().activeElement().equals(driver.findElement(By.id("widget_113_si‌ gnup_username"))); 总是会通过,但它不会证明如果元素在视图之外,则该元素会进入焦点。

注意:由于声望点不够,无法发表评论。

解决此问题的一种方法是使用 webElement.getLocation().getX(); getY() 方法并引用页面上的坐标并验证其焦点。

@danielwagner-hall The boolean bb = driver.switchTo().activeElement().equals(driver.findElement(By.id("widget_113_si‌​gnup_username"))); will always pass but it doesn't prove that the element is brought into focus if the element is out of view.

NB: Unable to comment as not enough reputation points.

One way of approaching this could be to use webElement.getLocation().getX(); getY() methods and reference the coordinates on the page and verify its focus.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文