无法替换 table 列中的值

Unable to replace value in a table column

无法发送 table 列中的值。我尝试使用 Selenium 在列中插入值时出现不同的错误。

  1. 我试图在 table 的列中设置一个新值。它显示错误为 The element must be user-editable in order to clear it.

    WebElement.clear();
    WebElement.sendKeys("value");
    
      (or)
    
    WebElement.sendKeys(Keys.DELETE);
    WebElement.sendKeys("value");
    
  2. 然后单击并编辑值。

    Actions actions = new Actions(getWebDriverEx());
    WebElement TableColumn = Driver.findElement(By.id("element"));
    actions.moveToElement(TableColumn);
    actions.click().build().perform();
    actions.sendKeys(Keys.BACK_SPACE+b+b);
    actions.sendKeys("value");
    

    传递的值未插入“表”列中。但我可以点击表格列。我的测试通过了。

  3. 然后尝试设置值。它显示错误超时。

     WebElement.sendKeys(Keys.DELETE);
     WebElement.sendKeys("15000");
    
  4. 我再次使用 div/span 组合作为 XPath 并且我编辑了值。但它并没有反映在table中。

    JavascriptExecutor js = (JavascriptExecutor) getDriver();
    js.executeScript("document.getElementById('element').innerHTML="+15000); 
    

这里我没有得到任何错误。但是保存后没有体现出来。

我给了各种格式元素。

  1. div//[id]
  2. div//跨度
  3. XPath
  4. 单独的id(在div中)

HTML:

<div id="element" class="tables_second_column">
    <div class="class_name">
        <div class="class_name">
            <div class="class_name"><span>5000</span></div>
        </div>
    </div>
</div>

根据您分享的 HTML,table 列位于 <span> 内,而 位于多个 <div> 内标签。因此我们需要构造一个唯一的xpath来标识WebElement并首先发送clear()方法然后使用sendKeys()方法如下:

driver.findElement(By.xpath("//div[@id='element']/div[@class='class_name']/div[@class='class_name']/div[@class='class_name']/span[text()='5000']")).clear();    
driver.findElement(By.xpath("//div[@id='element']/div[@class='class_name']/div[@class='class_name']/div[@class='class_name']/span[text()='5000']")).sendKeys("15000");

更新

正如您提到的 Text which was passed in the span is not predictable,所以我们将简单地省略子句 [text()='5000']。由于您提供了样本 HTML 和样本 classnames,我构建了一个几乎绝对的 xpath。所以我们的代码将是:

driver.findElement(By.xpath("//div[@id='element']/div[@class='class_name']/div[@class='class_name']/div[@class='class_name']/span")).clear();    
driver.findElement(By.xpath("//div[@id='element']/div[@class='class_name']/div[@class='class_name']/div[@class='class_name']/span")).sendKeys("15000");

尝试以下方法,它对我有用:

js = "document.querySelector('#element .class_name .class_name .class_name>span').innerHTML = '15000';"
driver.execute_script(js)

希望对您有所帮助!

这应该足够了

WebElement textBox = driver.findElement(By.xpath("//span[text()='5000']"));
textBox.clear();
textBox.sendKeys("");
textBox.sendKeys("15000");

我确实发送了一个空 space 以使文本框处于活动状态,因为有时 DOM 可能不会立即反映出来,因为此元素是安静嵌套的。

感谢您的回复

下面的方法对我有用

webElement.sendKeysByAction(value)