Selenium无法在找到的元素中发送密钥

时间:2017-01-10 08:04:48

标签: java selenium selenium-webdriver css-selectors

我有一个带有这个outerHtml的元素 -

<input class="inp-text ps-component ng-valid-maxlength ng-touched ng-pristine ng-empty ng-invalid ng-invalid-required" ng-model-options="{ updateOn: 'default blur', debounce: { 'default': 200, 'blur': 0 } }" required="required" maxlength="100" ng-model="model.name"/>

我曾经尝试过 -

driver.findElement(By.cssSelector("input"));

可以找到这个元素,但是当我尝试

driver.findElement(By.cssSelector("input")).sendKeys("something");

java告诉我element is not visible异常

driver.findElement(By.cssSelector("input")).click(); 

也不会工作。

如何在此输入元素中发送一些键?

我找到了解决方案的一部分。如果使用它,请单击()工作:

WebElement input = driver.findElement(By.cssSelector("input"))
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", input);

但我仍然不了解如何在其中发送密钥。

4 个答案:

答案 0 :(得分:2)

尝试使用Expected Conditions进行显式等待,以确保元素在与之交互之前可见

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input")));
element.sendKeys("something");

答案 1 :(得分:1)

WebDriver看不到元素的相同问题。相反,JavascriptExecutor能够帮助我。以下是一些简单的应用程序:

sendKeys()使用JavascriptExecutor:

// Cast driver to JavascriptExecutor
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("element = document.getElementsByTagName('input');");
jse.executeScript("element(0).value='" + yourInputString + "';");

click()使用JavascriptExecutor:

// Cast driver to JavascriptExecutor
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("javascript:submitForm()");

答案 2 :(得分:0)

您似乎正在尝试使用标记名称<input>进行定位 在这种情况下,此标记在同一页面中可以是多个。

driver.findElement(By.cssSelector("input"));

不会显示任何错误。  只需使您的定位器更具体,然后尝试例如.-

 driver.findElement(By.cssSelector("input.ps-component.ng-valid-maxlength.ng-touched.ng-pristine.ng-empty.ng-invalid.ng-invalid-required")).sendKeys("your_Value");

或者您可以根据页面中的唯一性来放置元素。

答案 3 :(得分:0)

它有效

js.executeScript("arguments[0].value=\"" + myText + "\";", input);