Java 无法替换表列中的值
无法发送表列中的值。在尝试使用Selenium在列中插入值时,出现了不同的错误Java 无法替换表列中的值,java,selenium,settext,Java,Selenium,Settext,无法发送表列中的值。在尝试使用Selenium在列中插入值时,出现了不同的错误 我试图在表的列中设置一个新值。它显示错误,因为元素必须是用户可编辑的才能清除它 WebElement.clear(); WebElement.sendKeys("value"); (or) WebElement.sendKeys(Keys.DELETE); WebElement.sendKeys("value"); 然后单击并编辑该值 Actions actions = new Actions(getWe
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");
传递的值未插入表列中。但是我可以单击Tables列。我的考试通过了 WebElement.sendKeys(Keys.DELETE);
WebElement.sendKeys("15000");
JavascriptExecutor js = (JavascriptExecutor) getDriver();
js.executeScript("document.getElementById('element').innerHTML="+15000);
5000
根据您共享的HTML
,表格列位于一个
内,该列位于多个
标记内。因此,我们需要构造一个唯一的xpath
来识别
,首先发送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");
更新
正如您提到的,在span中传递的
文本是不可预测的
,因此我们只需省略子句[Text()='5000']
。由于您提供了带有示例classnames
的示例HTML
,我构建了一个几乎绝对的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");
根据您共享的
HTML
,表列位于一个
内,该标签位于多个
标记内。因此,我们需要构造一个唯一的xpath
来识别
,首先发送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");
更新
正如您提到的,在span中传递的
文本是不可预测的
,因此我们只需省略子句[Text()='5000']
。由于您提供了带有示例classnames
的示例HTML
,我构建了一个几乎绝对的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)
希望它能帮助你 试试下面这些,它对我很有用:
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");
我确实发送了一个空格来激活文本框,因为有时DOM可能不会立即反映,因为该元素是安静嵌套的。这应该足够了
WebElement textBox = driver.findElement(By.xpath("//span[text()='5000']"));
textBox.clear();
textBox.sendKeys("");
textBox.sendKeys("15000");
我确实发送了一个空的空格来激活文本框,因为有时DOM可能不会立即反映,因为这个元素是安静嵌套的。谢谢您的回复
它适用于我以下的方法
webElement.sendKeysByAction(value)
谢谢你的回复
它适用于我以下的方法
webElement.sendKeysByAction(value)
前3种方法不正确,因为sendKeys仅适用于“输入”html元素,如textbox和textarea,而不适用于span和div。在第四种方法中,您需要访问span,然后使用innerhtml。-@Grasshopper但是为什么要求助于
JavascriptExecutor
,而没有对Java
click()
?@DebanjanB进行公平的测试呢?如果单击使文本框可见以输入文本,则没有提及。如果是这样,那么它应该是首选方法。@Grasshopper我不认为文本框不可见或隐藏的原因。IMO,正如您提到的,OP只是没有深入到
标记中。所以我猜Java click()
应该可以用。@Grasshopper,sendKeys
不限于任何类型的HTML元素,而且
可以通过设置属性来编辑。前3种方法不正确,因为sendKeys只对“输入”HTML元素(如textbox和textarea)起作用,不适用于span和div。在第四种方法中,您需要访问span,然后使用innerhtml。-@Grasshopper但是为什么要求助于JavascriptExecutor
,而没有对Java
click()
?@DebanjanB进行公平的测试呢?如果单击使文本框可见以输入文本,则没有提及。如果是这样,那么它应该是首选方法。@Grasshopper我不认为文本框不可见或隐藏的原因。IMO,正如您提到的,OP只是没有深入到
标记中。所以我猜Java click()
应该可以用。@Grasshopper,sendKeys
不限于任何类型的HTML元素,
可以通过设置属性进行编辑。在span中传递的文本是不可预测的。它是一个动态值。在传递sendKeys之前,我需要获取文本。请查看我更新的答案,并让我知道状态无法清除webelement,它显示错误为“Element必须是用户可编辑的才能清除”,因此这意味着您自己提供的示例[DIV]不可编辑且不正确&我们无法在这方面帮助您。因此,请通过单击我的答案
旁边的勾号接受答案
,就在VoteDown
箭头下方,这样勾号变为绿色。Div是正确的。使用上面提到的XPath对我不起作用。我需要先得到元素。然后,只有我才能编辑该值。在跨度中传递的文本是不可预测的。它是一个动态值。在传递sendKeys之前,我需要获取文本。请查看我的更新答案,并告诉我无法清除webelement的状态,它将错误显示为“Element必须是用户可编辑的才能清除”,这意味着您自己提供的示例[DIV]未被删除