繁体   English   中英

Selenium WebDriver,从表中删除

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM