无法在表列中发送值。当我尝试使用Selenium在列中插入值时,我遇到了不同的错误。
我尝试在表格的列中设置新值。它显示错误,因为元素必须是用户可编辑的才能清除它。
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列中。但我可以单击Tables列。我的测试通过了。
然后尝试设置值。它将错误显示为超时。
WebElement.sendKeys(Keys.DELETE);
WebElement.sendKeys("15000");
我再次使用div / span组合作为XPath,我编辑了值。但它没有反映在表格中。
JavascriptExecutor js = (JavascriptExecutor) getDriver();
js.executeScript("document.getElementById('element').innerHTML="+15000);
这里我没有任何错误。但保存后没有反映出价值。
我给各种格式的元素。
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>
答案 0 :(得分:1)
根据您分享的HTML
,表格列位于 <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");
答案 1 :(得分:1)
尝试以下内容,它对我有用:
js = "document.querySelector('#element .class_name .class_name .class_name>span').innerHTML = '15000';"
driver.execute_script(js)
希望它可以帮到你!
答案 2 :(得分:1)
这应该足够了
WebElement textBox = driver.findElement(By.xpath("//span[text()='5000']"));
textBox.clear();
textBox.sendKeys("");
textBox.sendKeys("15000");
我发送一个空格,以便让文本框处于活动状态,因为DOM可能不会立即反映,因为此元素是静默嵌套的。
答案 3 :(得分:0)
感谢您的回复
使用以下方法对我有用
webElement.sendKeysByAction(value)