Selenium - 无法在具有隐藏元素的网页上发送文本

时间:2018-02-15 22:20:58

标签: selenium selenium-webdriver

这是隐藏在页面中的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。

但问题在于需要传递给此元素的实际文本。

实际页面上没有显示文本框,因为它希望用户扫描条形码。

有没有办法让元素聚焦并向其发送密钥?

2 个答案:

答案 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);