这是隐藏在页面中的webelement
<form method="post" action="" data-reactid="x.x.x.x">
<input class="barcode-input" data-reactid="x.x.x.x" type="text">
</form>
它没有隐藏标签,而是位于@ top:-9999px;
当我尝试这个时
driver.findElement(By.xpath("//input[@class='barcode-input'][@type='text']")).sendKeys("barcode123"+Keys.RETURN);
我明白了
cause: org.openqa.selenium.ElementNotVisibleException, message: 'Element is not currently visible and so may not be interacted withCommand duration or timeout: 10.04
当试图打印此元素的isDisplayed和isEnabled属性时,我得到
isDisplayed = false,
isEnabled = true
CSS样式
input.barcode-input[type="text"] {
border-radius: 0 !important;
box-shadow: none !important;
outline: 0 none !important;
position: fixed;
top: -9999px;
transition: none 0s ease 0s !important;
}
如果我禁用上面显示的顶级css属性,我可以看到文本框。这是一个网页,期望用户扫描条形码并附加“ENTER”键。 附加回车键我可以使用KEYS.RETURN。
但问题在于需要传递给此元素的实际文本。
实际页面上没有显示文本框,因为它希望用户扫描条形码。
有没有办法让元素聚焦并向其发送密钥?
答案 0 :(得分:0)
首先,您必须将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");
答案 1 :(得分:0)
试过这个并解决了问题
JavascriptExecutor javascript = (JavascriptExecutor) driver;
javascript.executeScript( “document.getElementsByClassName(\” 条形码输入\ “)[0] .style.top = \” 1 \ “;”);
javascript.executeScript( “document.getElementsByClassName(\” 条形码输入\ “)[0]。价值= \” test123 \ “;”);
driver.findElement(By.xpath( “//输入[@类= '条形码输入']”))的SendKeys(Keys.RETURN);