首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在活动的WebDriver会话中手动单击对象时获取WebElement对象

如何在活动的WebDriver会话中手动单击对象时获取WebElement对象
EN

Stack Overflow用户
提问于 2018-02-06 00:49:33
回答 2查看 208关注 0票数 0

我正在使用java swing创建一个应用程序来验证对象存储库,这将有助于维护selenium脚本。这个应用程序将启动一个WebDriver实例,然后让用户手动导航到他/她希望检查的元素。

我想要获取用户单击的WebElement对象的实例,这样我就可以将最后单击的web元素作为参数传递到下面的函数中,该函数返回一个Xpath。

我在web上找不到任何与此相关的东西。

代码语言:javascript
复制
public String getElementXPath(WebDriver driver, WebElement element) {
    return (String)((JavascriptExecutor)driver).executeScript("gPt=function(c){if(c.id!==''){return'id(\"'+c.id+'\")'}if(c===document.body){return c.tagName}var a=0;var e=c.parentNode.childNodes;for(var b=0;b<e.length;b++){var d=e[b];if(d===c){return gPt(c.parentNode)+'/'+c.tagName+'['+(a+1)+']'}if(d.nodeType===1&&d.tagName===c.tagName){a++}}};return gPt(arguments[0]).toLowerCase();", element);
}
EN

回答 2

Stack Overflow用户

发布于 2018-02-06 01:51:59

你不能仅仅通过点击元素来获取实例。您应该自己创建惟一的xpath,然后就可以了。

要获取webelement的实例,可以使用next:

代码语言:javascript
复制
WebElement el = (WebElement)((JavascriptExecutor)driver)
                              .executeScript("document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;");

在这种情况下,您应该自己构建xpath,然后使用它查找元素。请参阅herehere

票数 0
EN

Stack Overflow用户

发布于 2018-02-06 02:20:11

对于这个问题,webdriver还没有一个解决方案。您需要弄清楚的是如何根据您单击的内容生成一个定位器,比如xpath或css选择器。这很可能需要在页面上以某种注入的javascript的形式来监听点击。在谷歌上快速搜索,会得到这个答案How to get the xpath by clicking an html element

一旦你有了这个定位器,你的下一个任务就是把它带到你的webdriver代码的作用域中,这样你就可以在测试中使用它的值了。

就在我的头上,你可以这样做的一种方法是使用相同的javascript注入在页面的角落创建一个隐藏元素,它的value属性在每次单击时更新到您决定生成定位器的任何输出。这将允许您的java代码获取该秘密元素,并向其请求先前单击的元素的xpath。

但需要注意的是,如果您要在页面上注入任何内容,请确保您的注入不会更改页面上元素的上下文。如果您注入了对实际页面元素有功能影响的任何内容,那么当您将页面恢复到其自然状态时(通过页面刷新或其他方式),您的xpath可能会停止工作。

一般来说,注入页面不利于测试,因为它会使页面的已知状态失效。但是,听起来您似乎正在尝试实现一个xpath辅助工具,用于帮助在另一个上下文中编写webdriver代码,只要正确生成了xpath,并且注入不会改变其绝对位置,就可以使用该工具。

还有一件事需要考虑,您是否希望生成简洁且构建良好的定位器?您找到的任何生成的定位器都可能是爬行dom并构建冗长的绝对路径的结果,这将更容易被活跃开发的站点破坏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48627497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档