[英]Selenium WebDriver, deleting from a table
我一直在努力从表中删除一行。 我真的无法弄清楚我在做什么错,我在非常相似的表上执行了非常相似的操作,并且没有问题。
以下是HTML中的表格布局。 第一个TR是报头(需要忽略),之后每个TR等于一个条目,并且限制为4个条目。
<table id="table" cellspacing="0" cellpadding="0" style=" border:0px black solid;WIDTH:100%;">
<tbody>
<tr>
<tr onclick="jsEvent('list item 1)">
<td class="attributes" style="font-size:12px ;font-family: sans-serif ;color: black ;background: #FFFFFF ">BIGNAME</td>
<td class="attributes" style="font-size:12px ;font-family: sans-serif ;color: black ;background: #FFFFFF "/>
<td class="attributes" style="font-size:12px ;font-family: sans-serif ;color: black ;background: #FFFFFF "/>
<td class="attributes" style="font-size:12px ;font-family: sans-serif ;color: black ;background: #FFFFFF "/>
<td class="attributes" style="font-size:12px ;font-family: sans-serif ;color: black ;background: #FFFFFF "/>
<td class="attributes" style="font-size:12px ;font-family: sans-serif ;color: black ;background: #FFFFFF "/>
<td class="attributes" style="font-size:12px ;font-family: sans-serif ;color: black ;background: #FFFFFF ">Y </td>
<td class="attributes" style="font-size:12px ;font-family: sans-serif ;color: black ;background: #FFFFFF ">2 </td>
<td class="attributes" style="font-size:12px ;font-family: sans-serif ;color: black ;background: #FFFFFF "/>
</tr>
<tr onclick="jsEvent('list item 2)">
<tr onclick="jsEvent('list item 3)">
<tr onclick="jsEvent('list item 4)">
</tbody>
</table>
显然,这不是确切的代码,而是HTML的足够近的副本,本质上,我需要检测表是否为空,如果不为空,则需要删除所有条目(但是第一个条目是标头)
这是我到目前为止尝试过的硒
try{
Thread.sleep(500);
//System.out.println("STUFF");
WebElement deleteName = driver.findElement(By.xpath("html/body/table/tbody/tr[2]/td[2]/img"));
WebElement rowWithNameEntry = null;
//System.out.println("STUFF");
for(int i=2; i>6; i++){
WebElement nameEntry = driver.findElement(By.xpath(".//*[@id='table']/tbody/tr["+i+"]/td[1]"));
rowWithNameEntry = nameEntry.findElement(By.xpath("./.."));
System.out.println("stuff");
rowWithNameEntry.click();
deleteName.click();
Thread.sleep(100);
new Actions(driver).sendKeys(Keys.RETURN).perform();
Thread.sleep(100);
}
如果这样做不起作用,我也尝试了这种方法。
WebElement mainTable = driver.findElement(By.id("table"));
List<WebElement> nameEntries = mainTable.findElements(By.xpath(".//*[@id='table']/tbody/tr[2]"));
for (WebElement nameEntry : nameEntries) {
nameEntry.click();
deleteName.click();
Thread.sleep(100);
new Actions(driver).sendKeys(Keys.RETURN).perform();
Thread.sleep(100);
在这两种情况下(以及我尝试过的其他五十种情况),即使有4个表条目,该程序也只跳过try / catch,然后在尝试输入第5个条目时中断。
任何协助都很棒,
谢谢大家,法雷尔
PS(顺便说一句,如果我希望通过“ BIGNAME”属性进行选择,该怎么做?)
您是否尝试过将表数据放入ArrayList中? 。 可能是您可以使用该arraylist进行进一步使用,还可以删除不需要的list元素。 我对硒也很陌生,如果我没记错的话,我认为硒不会允许您在网络浏览器上操作表格或html id。 您可以发送密钥,但可以删除行吗? ..不太确定。 因此,除非提供一种方法(使您能够删除行的方法),否则我认为您无法删除行。 请让我知道这是否适合您。
首先,您可以像这样获取表的所有行:
List<WebElement> rows = we.findElements(By.xpath(".//tbody/tr"));
那么您可以遍历所有行,然后像这样获得一行的所有列:
List<WebElement> cols = rows.get(rowID).findElements(By.xpath(".//td"));
要检查“ BIGNAME”,请遍历cols并执行以下操作:
cols.get(index).getText().equals("BIGNAME")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.