我有这样的HTML
<tr>
<td>
<label>...</label>
</td>
<td>
<input>...</input>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
<a> ...</a>
</td>
</tr>
您得到图片。几行(在这种情况下为3行),每行包含tds(在这种情况下为67行),并且只有一部分tds具有子元素。
我需要逐行查看每个td。如果没有子元素,那么我将从td中获取文本。如果有输入,则只有1个输入,我得到它的值。如果有两个输入,我得到的值是type =“ hidden”。
我用
找到行 driver.findElements(By.xpath("blahblahblah//tr");
我遍历每一行并找到
row.findElements(By.xpath("td"));
这没问题。但是然后我通过tds查找元素:
td.findElements(By.xpath("*"))
(请注意,这可以,因为它不是// *) 因此,如果td有子元素,它会立即返回。但是,如果没有,它会等待直到超时。
我做了
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
甚至是
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
两者都不起作用,正如我期望的那样仅适用于
driver.findelements(By.xpath)).
有没有办法为元素查找设置此超时时间?这些TDS没有ID 或其他任何方法,或者我只能做
driver.findElements(By.xpath(xpath with id + "//*"));
超时可能会起作用。
如果没有id或name或诸如此类的元素,是否有任何方法可以获取特定的xpath?
有两个问题:1:如何设置元素超时,2:如果有元素,如何为其获取xpath
答案 0 :(得分:0)
我看不到超时的原因。只是您必须遍历所有行并获取数据。这是我写的脏代码。
String value;
int rows = driver.findElements(By.xpath("//table//tr")).size();
int columns = driver.findElements(By.xpath("//table//tr[1]/td")).size();
for(int row = 1; row <rows+1; ++row) {
for (int col =1; col<columns+1; col++) {
//now check if there are any children with input hidden
if (driver.findElements(By.xpath("//table//tr["+ row +"]/td["+ col +"]/input[@type='hidden']")).size()>0) {
value = driver.findElement(By.xpath("//table//tr["+ row +"]/td["+ col +"]/input[@type='hidden']")).getAttribute("value");
}
//now check if there are any children with input without hidden
else if ((driver.findElements(By.xpath("//table//tr["+ row +"]/td["+ col +"]/input")).size()>0)) {
value = driver.findElement(By.xpath("//table//tr["+ row +"]/td["+ col +"]/input")).getAttribute("value");
}
//just get text as there are no children input
else {
value = driver.findElement(By.xpath("//table//tr["+ row +"]/td["+ col +"]")).getText();
}
System.out.println("Row:" + row + " Col:" + col + " value:" + value);
}
}