无法替换 table 列中的值
Unable to replace value in a table column
无法发送 table 列中的值。我尝试使用 Selenium 在列中插入值时出现不同的错误。
我试图在 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");
然后单击并编辑值。
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");
传递的值未插入“表”列中。但我可以点击表格列。我的测试通过了。
然后尝试设置值。它显示错误超时。
WebElement.sendKeys(Keys.DELETE);
WebElement.sendKeys("15000");
我再次使用 div/span 组合作为 XPath 并且我编辑了值。但它并没有反映在table中。
JavascriptExecutor js = (JavascriptExecutor) getDriver();
js.executeScript("document.getElementById('element').innerHTML="+15000);
这里我没有得到任何错误。但是保存后没有体现出来。
我给了各种格式元素。
- div//[id]
- div//跨度
- XPath
- 单独的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)
无法发送 table 列中的值。我尝试使用 Selenium 在列中插入值时出现不同的错误。
我试图在 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");
然后单击并编辑值。
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");
传递的值未插入“表”列中。但我可以点击表格列。我的测试通过了。
然后尝试设置值。它显示错误超时。
WebElement.sendKeys(Keys.DELETE); WebElement.sendKeys("15000");
我再次使用 div/span 组合作为 XPath 并且我编辑了值。但它并没有反映在table中。
JavascriptExecutor js = (JavascriptExecutor) getDriver(); js.executeScript("document.getElementById('element').innerHTML="+15000);
这里我没有得到任何错误。但是保存后没有体现出来。
我给了各种格式元素。
- div//[id]
- div//跨度
- XPath
- 单独的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)