我目前正在尝试使用Selenium webdriver在一个充满用户的表中向下钻取用户,我已经研究了如何遍历表格,但我实际上在选择我想要的人时遇到了麻烦。
这是HTML(由于它不是我的数据而用X修改)
<table id="XXXXXXXXX_list" cellspacing="0" cellpadding="0" style=" border:0px black solid;WIDTH:100%;">
<tbody>
<tr cellspacing="0" style="height: 16px;">
<tr>
<tr onclick="widgetListView_onClick('XXXX_list',1,this,event)">
<tr onclick="widgetListView_onClick('XXXX_list',2,this,event)">
<tr onclick="widgetListView_onClick('XXXX_list',3,this,event)">
<tr onclick="widgetListView_onClick('XXXX_list',4,this,event)">
<tr onclick="widgetListView_onClick('XXXX_list',5,this,event)">
<tr onclick="widgetListView_onClick('XXXX_list',6,this,event)">
<tr onclick="widgetListView_onClick('XXXX_list',7,this,event)">
<td class="listView_default_dataStyle" nowrap="" style="font-size:12px ;
font-family: sans-serif ;color: black ;background: #FFFFFF "
ondblclick="XXXXListView_onDblClick('XXXXX_list',17, event)">NAME</td>
<td class="listView_default_dataStyle" nowrap="" style="font-size:12px ;font-family: sans-serif;
color: black ;background: #FFFFFF " ondblclick="XXXXX_onDblClick('XXXX_list',17, event)"> </td>
</tr>
以下是我正在编写的代码,试图通过表格中的NAME找到用户。
WebElement table = driver.findElement(By.id("table_list"));
// Now get all the TR elements from the table
List<WebElement> allRows = table.findElements(By.tagName("tr"));
// And iterate over them, getting the cells
for (WebElement row : allRows) {
List<WebElement> cells = row.findElements(By.tagName("td"));
for (WebElement cell : cells) {
List<WebElement> Names = cell.findElements(By.xpath("//td[text()='NAME']"));
System.out.println(Names);
这只打印了数千个[](该表在实际应用中非常庞大)。 基本上我需要的是当我找到正确的名称并从该表行创建一个web元素时停止。然后我可以点击并向下钻取。
对不起,如果这有点含糊不清,
答案 0 :(得分:1)
如果表中的每个名称都是唯一的,那么您不需要太多复杂的事情。只需搜索与“名称”匹配的文本元素,然后相应地选择行。请看下面的代码:
WebElement name = driver.findElement(By.xpath("//table[@id='XXXXXXXXX_list']//td[contains(text(),'NAME')]"));//Select td with text NAME in table with id XXXXXXXXX_list
WebElement rowWithName = name.findElement(By.xpath("./.."));//Select the parent node, i.e., tr, of the td with text NAME
/*
* Look into that row for other element or perform any action on the row.
*/
如果名称不是唯一的,即同一名称在同一节点存在两次,则每次都会选择第一个实例。在这种情况下,我们将不得不尝试不同的方式,即我们必须索引xpath以获得匹配名称的正确实例。如果你有任何疑问,请问:)
答案 1 :(得分:-1)
这会帮助你。
try{
ArrayList<WebElement> cells = (ArrayList<WebElement>) driver.findElements(By.tagName("td"));
log4j.info("Value = "+input_type+" is stored in array from Webpage for "+keyword+" ");
for(WebElement type : cells)
{
if(type.getAttribute("name").equals("your correct name here")) {
type.sendKeys("ABC");
}
}
return true;
}catch(Throwable e){
return false;
}
你需要使用像这样的数组列表,你可以比较你想要填充值的名称或想做任何操作,如getText(),点击()等。
享受!