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)
你问的问题对我没有任何意义.我想你可能有充分理由"想要去做"!
你的代码行
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)
和上面一样!
我的目的是在表中查找文本并获取同一行中相应的下一列值。我想我会将通过获取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]
来检索该特定列的所有单元格。
我写了一个方法,请不要将其视为真正的工作代码!
归档时间: |
|
查看次数: |
81247 次 |
最近记录: |