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

23

我正在使用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秒

请问有谁能帮我在隐藏字段中编写/输入一些文本吗?


需要补充的是: id是动态的。这里id=":6b",有时候我发现id=":3y"。 - user1554024
3个回答

32

首先,您必须将type属性的值从hidden更改为text。下面的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");

我猜使用JS设置值应该按以下方式进行:jse.executeScript("document.getElementsByName('body')[0].value='Ripon Al Wasim作为正文';"); - Ripon Al Wasim
当我使用您提供的代码时,我在 jse.executeScript("document.getElementsByName('body')[0].setAttribute('type', 'text');") 行上遇到了 NullPointerException 错误。 - Umamaheshwar Thota
实际上,我的领域是可见的,但我无法在该领域中输入数据。 - Umamaheshwar Thota
我问过那个问题。 - Umamaheshwar Thota
Umamaheshwar Thota:由于您的字段是可见的(这意味着该字段未被隐藏),因此您可以跳过以下代码行 jse.executeScript("document.getElementsByName('body')[0].setAttribute('type', 'text');"); - Ripon Al Wasim
显示剩余2条评论

5
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);

0

你需要初始化一个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');");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接