按文本查找元素并获取xpath - selenium webdriver junit

Nan*_*shi 10 junit selenium selenium-webdriver

我的网页上有一个包含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);
 }
}
Run Code Online (Sandbox Code Playgroud)

Sco*_*Izu 24

您还可以使用它来爬网并生成xpath:

用下面的方法调用

generateXPATH(element, "");
Run Code Online (Sandbox Code Playgroud)

输出将是这样的:

/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]
Run Code Online (Sandbox Code Playgroud)

方法

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 哇!你让我今天很开心!谢谢! (4认同)
  • 这是一个非常好的解决方案。非常感谢 !!好开心好想亲你的嘴!! (2认同)

Abh*_*ngh 7

你问的问题对我没有任何意义.我想你可能有充分理由"想要去做"!

你的代码行

 String xpath = driver.findElement(By.name(test)).getAttribute("xpath");
Run Code Online (Sandbox Code Playgroud)

因为html元素中没有属性'xpath',所以不会返回任何内容.请清楚了解xpath的含义?

如果我有一个html元素,如下所示

<input name = "username" value = "Name" readonly ="readonly">
Run Code Online (Sandbox Code Playgroud)

我可以通过使用获取属性的值

driver.findElement(By.name("username").getAttribute("value");  // returns 'Name'
Run Code Online (Sandbox Code Playgroud)

这将给出"价值"属性的价值

要么

driver.findElement(By.name("username").getAttribute("readonly");  // returns 'readonly'
Run Code Online (Sandbox Code Playgroud)

和上面一样!


Rob*_*ham 5

元素的XPath不是确定值.许多XPath都可以找到一个元素.

您无法使用Webdriver提取XPath,即使可以,也不可能是最有效或最明智的,只能由自动机定义.


cod*_*iot 1

我的目的是在表中查找文本并获取同一行中相应的下一列值。我想我会将通过获取xpath找到的列号替换为我想要的列号。有更好的方法吗

当然有办法。这是一种可能的解决方案。

获取所有行:

While (iterate over row)
     While(Iterate over column)
           if(column.Text=='YOUR_MATCH'){
             int voila=column.Index
           }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以简单地移动到其他行的特定索引;或者您可以使用 xpath.../tr/td[voila]来检索该特定列的所有单元格。

我写了一个方法,请不要将其视为真正的工作代码!