我使用Selenium
WebDriver
使用java在2 textboxe
中输入文字。我可以在第一个文本框中输入文字,但是对于第二个textbox
,我会继续ElementNotVisibleException
HTML代码 ..
<form name="form">
<div class="form-group">
<input name="name" type="text" class="form-control" ng-model="name" placeholder="Name*" required>
</div>
<div class="form-group">
<input name="email" id="email" type="email" class="form-control" ng-model="email" ng-change="(form.email.$dirty && form.email.$valid) ? error='' : error='Please enter a valid email'" placeholder="Email*" required autofocus/>
</div>
</form>
Java代码 ..
WebElement name = driver.findElement(By.name("name"));
name.sendKeys("Sample Name");
WebElement signup_email = driver.findElement(By.name("email"));
signup_email.sendKeys("abc@xyz.com");
错误:
org.openqa.selenium.ElementNotVisibleException:元素不是 目前可见,因此可能无法与Command交互 持续时间或超时:19毫秒构建信息:版本:&#39; 2.53.1&#39;, 修订版:&#39; a36b8b1&#39;,时间:&#39; 2016-06-30 17:32:46&#39;系统信息:主持人: &#39; Hp-PC&#39;,ip:&#39; 172.16.255.131&#39;,os.name:&#39; Windows 7&#39;,os.arch:&#39; amd64&#39 ;, os.version:&#39; 6.1&#39;,java.version:&#39; 1.7.0_79&#39;会话ID: 2e7ab2fd-cd6b-428e-86e7-a4f7d8d737fa驱动程序信息: org.openqa.selenium.firefox.FirefoxDriver功能 [{platform = WINDOWS,acceptSslCerts = true,javascriptEnabled = true, cssSelectorsEnabled = true,databaseEnabled = true,browserName = firefox, handlesAlerts = true,nativeEvents = false,webStorageEnabled = true, rotating = false,locationContextEnabled = true, applicationCacheEnabled = true,takesScreenshot = true,version = 47.0.1}] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在java.lang.reflect.Constructor.newInstance(Constructor.java:526)at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678) 在 org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:327) 在 org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:122) 在src.tests.EmailSignUp.test(EmailSignUp.java:107)at src.tests.EmailSignUp.main(EmailSignUp.java:27)
修改1 :
在浏览器控制台中,角度Js
会自动填充以下类我无法理解第二次textbox
时我出错的地方。角度代码是否会引起问题?请帮助..
答案 0 :(得分:1)
可能在您要查找元素时,它不会出现在DOM
上,您应该尝试使用WebDriverWait
等待元素存在,如下所示: -
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement name = wait.until(ExpectedConditions.presenceOfElementLocated(By.name("name")));
name.sendKeys("Sample Name");
WebElement signup_email = wait.until(ExpectedConditions.presenceOfElementLocated(By.name("email")));
signup_email.sendKeys("abc@xyz.com");
Edited1 : - 如果您在sendKeys()
期间仍然遇到问题,我认为您的元素中嵌入了一些javascript,使其不可见,在这种情况下尝试使用{{设置值1}}如下: -
JavascriptExecutor
Edited1 : - 如果您想让元素可见,如果不确定css在您的元素中究竟是什么工作但下面是通用的制作方法,如下所示: -
WebElement signup_email = wait.until(ExpectedConditions.presenceOfElementLocated(By.name("email")));
((JavascriptExecutor)driver).executeScript("arguments[0].value = 'abc@xyz.com'", signup_email);
已修改: - 我认为此元素适用于WebElement signup_email = wait.until(ExpectedConditions.presenceOfElementLocated(By.name("email")));
signup_email = (WebElement)((JavascriptExecutor)driver).executeScript("arguments[0].style.visibility = 'visible'; return arguments[0];", signup_email);
//Now if it is visible then goto set value
signup_email.sendKeys("abc@xyz.com");
,请尝试angularjs
内容使用angularjs
设置值,如下所示:
JavascriptExecutor
希望它有帮助...:)