作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始使用 Selenium,我决定只使用 Selenium 2/WebDriver。
在我的测试代码中,我经常到达 WebElement
不知道它在页面中的位置。
我想要代码,给定一个 WebElement,构造一个 XPath 表达式来唯一地选择它。
用于 Selenium 的 FireFox 记录器插件可以做到这一点;我想要的是在 Selenium 2 中执行此操作的代码。
我可以使用 WebElement
自己编写这样的代码的findElement
至walk up the tree和 findElements
找到我们来自的 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/
我是一名优秀的程序员,十分优秀!