【问题标题】:How to enter values to group of textfields in a table using selenium如何使用 selenium 向表格中的一组文本字段输入值
【发布时间】:2016-03-08 07:44:23
【问题描述】:

我想在表格中使用 selenium 向一组文本字段输入值,如下所示。

我尝试过这种方式,但没有成功并提出InvalidElementStateException

 List<WebElement> marks = driver.findElements(By.xpath(".//table/tbody/tr/td/input"));
    for (WebElement mark : marks) {
    mark.sendKeys("10");
    }

编辑: 在我的 html 中,td 还包含一个额外的隐藏输入。

<tbody>
<tr class="text-center student-mark" id="1">
    <td class="text-left">Name</td>

    <td class="activityTableBody hidden" >
        <input type="text" class="table-input 55630af2a0c4655a1ce06fcd_classTest" 
               id="55630af2a0c4655a1ce06fcd_classTest_556da05c699e70287ca203b0_classTest" value="0">
    </td>

    <td class="activityTableBody" >
        <input type="text" class="table-input 55630af2a0c4655a1ce06fcd_activity1" 
               id="55630af2a0c4655a1ce06fcd_activity1_556da05c699e70287ca203b0_Task-1" value="0">
    </td>

    <td class="activityTableBody" >
        <input type="text" class="table-input 55630af2a0c4655a1ce06fcd_activity2" 
               id="55630af2a0c4655a1ce06fcd_activity2_556da05c699e70287ca203b0_Task-1" value="0">
    </td>

    <td class="activityTableBody">
        <input type="text" class="table-input 55630af2a0c4655a1ce06fcd_activity3" 
               id="55630af2a0c4655a1ce06fcd_activity3_556da05c699e70287ca203b0_Task-1" value="0">
    </td>

    <td class="activityTableBody" >
        <input type="text" class="table-input 55630af2a0c4655a1ce06fcd_activity4" 
               id="55630af2a0c4655a1ce06fcd_activity4_556da05c699e70287ca203b0_Task-1" value="0">
    </td>

    <td class="activityTableBody" >
        <input type="text" class="table-input 55630af2a0c4655a1ce06fcd_activity5" 
               id="55630af2a0c4655a1ce06fcd_activity5_556da05c699e70287ca203b0_Task-1" value="0">
    </td>

    <td class="tableBodySA hidden" >
        <input type="text" class="table-input 55630af2a0c4655a1ce06fcd_markSA"   value="0">
    </td>
    <td class="tableBodySA hidden" *emphasized text*>
        <input type="text" class="table-input saMark 55630af2a0c4655a1ce06fcd_markSA100" width="20%"  value="0">
    </td>

</tr>
.
.
</tbody>

【问题讨论】:

  • 请分享您的 HTML 代码 .. 请详细说明您想在哪个列中输入天 .. 在所有列中?
  • @ShubhamJain 其实我想在表格的所有文本字段中输入值,而不是特定列。
  • 您的代码看起来不错..您的定位器一定有问题..这就是我要求 HTML 代码的原因...
  • 在发送键之前,您必须单击该元素..有时您需要清除它...提供您的 html 部分的详细信息。
  • 我尝试点击清除但没有成功。

标签: java selenium xpath selenium-webdriver


【解决方案1】:

您应该在td 中选择没有“隐藏”类的input

List<WebElement> marks = driver.findElements(By.xpath(
                ".//table/tbody/tr/td[contains(@class ,'activityTableBody' ) and not(contains (@class ,'hidden'))]/input"));
        for (WebElement mark : marks) {
            Integer studentMark = i++ % 6;
            System.out.println(studentMark);
            mark.click();
            mark.sendKeys(Integer.toString(studentMark));
        }

【讨论】:

    【解决方案2】:

    这个工作示例(来自您提供的 HTML)填充了所有可见单元格:

    WebDriver driver = new FirefoxDriver();
    driver.get("https://fiddle.jshell.net/40vr7top/show");
    driver.switchTo().frame(0);
    
    List<WebElement> inputs = driver.findElements(By.cssSelector("td.activityTableBody input"));
    for (WebElement input : inputs) {
      input.clear();
      input.sendKeys("99");
    }
    

    【讨论】:

    • 您应该提供页面源代码或可重现的示例。没有足够的信息来提供立即有效的答案。
    • 我在我的应用程序中尝试了你的解决方案,但出现错误.InvalidElementStateException: invalid element state: Element is not currently interactable and may not be manipulated
    • 我要求提供页面源代码或可重现的示例,而您只提供了部分 HTML。所以这里没有足够的信息来理解潜在的行为。
    猜你喜欢
    • 2011-02-24
    • 2016-06-10
    • 2021-12-30
    • 2012-08-05
    • 2013-10-08
    • 2018-12-25
    • 1970-01-01
    相关资源
    最近更新 更多