gpt4 book ai didi

api - WebDriver Selenium API : identifying a WebElement in XPath

转载 作者:行者123 更新时间:2023-12-04 18:14:33 25 4
gpt4 key购买 nike

我最近开始使用 Selenium,我决定只使用 Selenium 2/WebDriver。
在我的测试代码中,我经常到达 WebElement 不知道它在页面中的位置。

我想要代码,给定一个 WebElement,构造一个 XPath 表达式来唯一地选择它。

用于 Selenium 的 FireFox 记录器插件可以做到这一点;我想要的是在 Selenium 2 中执行此操作的代码。

我可以使用 WebElement 自己编写这样的代码的findElementwalk up the treefindElements找到我们来自的 child ,但想出快速(反复调用 By.xpath 似乎很糟糕)和完整的东西(例如,由于命名空间)并非易事。

(A related question 建议改用 CSS 选择器 - 我觉得很好。)

有没有人为我这样做过?最好的方法是什么?

最佳答案

也许这会有所帮助:我正在测试一个动态生成 id 的网站,因此它们一直在变化。为了获得他们的 xpath 并使用它,我使用了这个函数:

    /**
* Gets the absolute xPath for elements with dynamic ids.
*
* @param driver - the current WebDriver instance
* @param element - the element for which the xPath will be found
* @return the absolute xPath for this element
*/
public static String getElementXPath(WebDriver driver, WebElement element) {
return (String)((JavascriptExecutor)driver).executeScript(
"gPt=function(c)" +
"{" +
"if(c.id!=='')" +
"{return c.tagName + '[@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]);", element);
}

关于api - WebDriver Selenium API : identifying a WebElement in XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11986349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com