【问题标题】:Selenium WebDriver, deleting from a tableSelenium WebDriver,从表中删除
【发布时间】:2014-03-03 10:58:44
【问题描述】:

我一直在努力从表中删除一行。我真的无法弄清楚我做错了什么,我在非常相似的表上做了非常相似的操作并且没有遇到问题。

下面是 HTML 中的表格布局。第一个 TR 是 header(需要忽略),之后每个 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 的足够接近的副本,基本上我需要检测表是否为空,如果它不为空,我需要删除所有条目(但是第一个条目是标题)

这是我迄今为止尝试过的 Selenium

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);

在这两种情况下(以及我尝试过的其他 50 种情况),即使有 4 个表条目,程序也会跳过 try/catch,然后在尝试输入第 5 个条目时中断。

任何帮助都会很棒,

谢谢大家, 法雷尔

PS(顺便说一句,如果我希望通过“BIGNAME”属性进行选择,该怎么做?)

【问题讨论】:

  • 没有答案? :(

标签: java html selenium selenium-webdriver


【解决方案1】:

您是否尝试过将表数据放入 ArrayList ? .也许您可以使用该 arraylist 进行进一步使用,也可以删除您不想要的列表元素。我对 selenium 也很陌生,如果我没有错,那么我认为 selenium 不允许您在 Web 浏览器上操作表格或 html id。您可以发送密钥等但删除行? ..不太确定。因此,除非提供了一种方法(使您能够删除行的方法),否则我认为您不能删除行。请让我知道这是否适合您。

【讨论】:

  • 选择一行并单击 deleteName 按钮将删除该行。在网络应用程序中,有一个人名列表,您可以选择一个然后选择删除它们。这就是我试图模拟的动作。
  • 所以表格中的行旁边有复选框或选项按钮。如果是这样,那么这意味着一行的一个复选框。因此,如果您使用 xPath,它可能具有特定的 td 值。作为一种激进的方法,我建议您使用 xPath,即使它并不可取。这是您应该做的...遍历“ bigname ” td 中的行。为每一行增加计数。当您想删除某些行时,使用该计数来查找特定于该 row.so 的特定复选框,如果连续复选框是 td[1] , bigname td [2] , td [3] 等..那么它将是更容易检查特定行复选框。
【解决方案2】:

首先你可以像这样得到表格的所有行:

List<WebElement> rows = we.findElements(By.xpath(".//tbody/tr"));

然后您可以遍历所有行,然后像这样获取一行的所有列:

List<WebElement> cols = rows.get(rowID).findElements(By.xpath(".//td"));

要检查“BIGNAME”,请遍历列并执行以下操作:

cols.get(index).getText().equals("BIGNAME")

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 2020-03-02
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2013-04-14
    • 1970-01-01
    • 2016-12-01
    相关资源
    最近更新 更多