如何使用 Java 在 Selenium WebDriver 的隐藏字段中输入一些文本

IT技术 java javascript textfield selenium-webdriver hidden-field
2021-02-25 03:42:04

我正在使用带有 Java 的 WebDriver 进行测试自动化。我有以下隐藏的输入字段的 HTML 代码:

<input type="hidden" value="" name="body" id=":6b">

如何在 Selenium2 (WebDriver) 的隐藏字段中输入内容?我已将代码编写为:

driver.findElement(By.name("body")).sendKeys("test body");

但显示以下错误:org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与命令持续时间或超时交互:30.04 秒

有人可以帮我在隐藏字段中写/输入一些文本吗?

3个回答

首先,您必须将 type 属性的值更改为隐藏的文本。使用 javascript 的以下代码将适用于此:

jse.executeScript("document.getElementsByName('body')[0].setAttribute('type', 'text');");

现在,您可以使用 WebDriver 键入该文本。因此,使用 Java 和 Javascript 使用 WebDriver 在隐藏字段中键入的整体代码如下:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementsByName('body')[0].setAttribute('type', 'text');");
driver.findElement(By.xpath("//input[@name='body']")).clear();
driver.findElement(By.xpath("//input[@name='body']")).sendKeys("Ripon: body text");
实际上我的字段是可见的,但我无法在该字段中输入数据。
2021-04-25 03:42:04
@Umamaheshwar Thota:您能否提供此字段的 HTML 代码?
2021-05-01 03:42:04
我问过的那个问题。
2021-05-08 03:42:04
我想用 JS 设置一个值应该如下工作: jse.executeScript("document.getElementsByName('body')[0].value='Ripon Al Wasim as body text';");
2021-05-18 03:42:04
当我使用您提供的代码时,我在 jse.executeScript("document.getElementsByName('body')[0].setAttribute('type', 'text');"); 行上收到 NullPointerException 错误。
2021-05-18 03:42:04
WebDriver driver=new FirefoxDriver();
driver.get("http://localhost/login.do");
driver.manage().window().maximize();
RemoteWebDriver r=(RemoteWebDriver) driver;
String s1="document.getElementById('username').value='admin'";
r.executeScript(s1);

您需要初始化一个 JavascriptExecutor,它将执行一个 javaScript 命令:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('ElementId').setAttribute('type','text');");
driver.findElement(By.id("ElementId")).click();
driver.findElement(By.id("ElementId")).clear();
driver.findElement(By.id("ElementId")).sendKeys("theTextYouWant");

如果你想隐藏它:

js.executeScript("document.getElementById('ElementId').setAttribute('type','hidden');");