我正在尝试使用 Selenium Webdriver 和 Java 来测试 angularJs 前端。
我想将一些 key 发送到电子邮件输入框。 我面临的问题是,输入框对于 Selenium 来说似乎是不可见的。我想这与 Angular 的 ng-hide 指令有关。需要明确的是,当测试自动化启动时,我肯定可以看到输入框,因此对于我来说,输入框似乎是可见的。
前端图片:
HTML:
<input id="changedbyEmailInput" class="form-control ng-pristine ng-valid ng-empty ng-touched" type="text" ng-model="article.author.email" placeholder="Your Email" ng-hide="article.isTemp === false" style="">
获取文本框的Java代码:
element = driver.findElement(By.id("changedbyEmailInput"));
element.sendKeys(keys);
带有超时的 Java 代码
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("changedbyEmailInput")));
我也尝试过使用超时,但它只是超时,所以我想它永远不会改变它的状态。
PS:如果有人知道使用 Protractor 是否可以轻松解决此问题,请告诉我。如果它能解决我的问题,我愿意改用 Protractor 。
谢谢!
编辑: 问题已经解决了。它与 ng-hide 无关。这个 id 并不是唯一的。因此总是有一个被禁用的输入框。
最佳答案
您应该尝试 JavascriptExecutor
设置值,如下所示:-
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("document.getElementById('changedbyEmailInput').value = arguments[0]", "value to set");
希望对你有帮助...:)
关于java - 元素不可见异常 |使用 Selenium Webdriver 测试 AngularJs 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37655187/