通过文本查找元素并获取xpath
我在我的网页上有一个9行6列的表格。 我想搜索文本“MakeGoodDisabled-Programwise_09_44_38_461(n)”并获取单元格的xpath。 我已经使用了以下内容,但因为无法在页面中找到文本而失败。 你能帮忙吗? 我使用Selenium Webdriver Junit来编写代码。
`List<WebElement> links = driver.findElements(By.tagName("td"));
Iterator<WebElement> itr = links.iterator();
while(itr.hasNext()){
String test = itr.next().getText();
if(test.equals("MakeGoodDisabled-Programwise_09_44_38_461(n)")){
String xpath = driver.findElement(By.name(test)).getAttribute("xpath");
System.out.println(xpath);
}
}`
我的意图是在表格中找到文本,并在同一行中获取相应的下一列值。 我认为我将用我想要的列号替换通过提取xpath找到的列号。 有没有更好的方法来做到这一点
当然有一种方法。 这是一个可能的解决方案。
获取所有行:
While (iterate over row)
While(Iterate over column)
if(column.Text=='YOUR_MATCH'){
int voila=column.Index
}
}
}
现在,您可以简单地移动到其他行的特定索引; 或者您可以使用xpath如.../tr/td[voila]
来检索该特定列的所有单元格。
我写了一个方法,请不要把它当成真正的工作代码!
您也可以使用它来爬取并生成xpath:
用下面的方法调用方法
generateXPATH(element, "");
输出结果如下所示:
/html[1]/body[1]/div[5]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/form[1]/div[2]/div[1]/input[2]
方法
private String generateXPATH(WebElement childElement, String current) {
String childTag = childElement.getTagName();
if(childTag.equals("html")) {
return "/html[1]"+current;
}
WebElement parentElement = childElement.findElement(By.xpath(".."));
List<WebElement> childrenElements = parentElement.findElements(By.xpath("*"));
int count = 0;
for(int i=0;i<childrenElements.size(); i++) {
WebElement childrenElement = childrenElements.get(i);
String childrenElementTag = childrenElement.getTagName();
if(childTag.equals(childrenElementTag)) {
count++;
}
if(childElement.equals(childrenElement)) {
return generateXPATH(parentElement, "/" + childTag + "[" + count + "]"+current);
}
}
return null;
}
元素的XPath不是一个明确的值。 一个元素可以被许多XPath找到。
您不能使用Webdriver来提取XPath,即使可以,它也不可能是最高效或最合理的,只能由automator定义。
链接地址: http://www.djcxy.com/p/88589.html