我有一个带有这个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);
但我仍然不了解如何在其中发送密钥。
答案 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);