无法使用Selenium WebDriver

时间:2016-08-05 12:37:13

标签: java html angularjs selenium selenium-webdriver

我使用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

会自动填充以下类

Email_Console

我无法理解第二次textbox时我出错的地方。角度代码是否会引起问题?请帮助..

1 个答案:

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

希望它有帮助...:)