小智 8
不是直接来自WebDriver,但如果你真的需要,你可以伪造它:
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);
}
Run Code Online (Sandbox Code Playgroud)
Javascript来自这篇文章,缩小为适合一行.它可能不完美,但可以让你知道去哪里.大多数驱动程序实现了该JavascriptExecutor接口,并具有在浏览器中执行Javascript的功能.executeScript可以返回任何原始JavaScript类型,HTML元素或任何前述的非嵌套列表.
并非所有浏览器都以相同的方式支持xpath,因此在使用这些xpath选择元素时要小心.此外,并非所有浏览器都支持原生xpath(咳嗽 IE 咳嗽),因此在这种情况下它是假的.
如果By.xpath发现WebElement:在Java上:
public static String GetWebElementXpath(WebElement El) throws AssertionError{
if ((El instanceof WebElement)){
Object o = El;
String text = o.toString();
/* text is smth like this
[[FirefoxDriver: firefox on WINDOWS (9170d4a5-1554-4018-adac-f3f6385370c0)] -> xpath: //div[contains(@class,'forum-topic-preview')]//div[contains(@class,'small-human')]]
*/
text = text.substring( text.indexOf("xpath: ")+7,text.length()-1);
return text;
}else { Assert.fail("Argument is not an WebElement, his actual class is:"+El.getClass()); }
return "";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19254 次 |
| 最近记录: |