2016-08-05 16 views
1

kann ich keinen Wert eingeben. Ich benutze SeleniumWebDriver, um Text in 2 textboxe mit Java einzugeben. Ich bin in der Lage Text in der ersten Textfeld einzugeben, aber für die 2. textbox Ich erhalte ElementNotVisibleExceptionMit Selenium WebDriver

HTML-Code ..

<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-Code ..

WebElement name = driver.findElement(By.name("name")); 
name.sendKeys("Sample Name"); 

WebElement signup_email = driver.findElement(By.name("email")); 
signup_email.sendKeys("[email protected]"); 

Fehler:

org.openqa.selenium.ElementNotVisibleException: Element nicht zur Zeit sichtbar und so nicht interagiert werden kann mit Befehl Dauer oder Timeout: 19 Millisekunden beim Aufbau Info: Version: '2.53.1', Revision: 'a36b8b1', time: '2016-06-30 17:32:46' Systeminfo: host: 'Hp-PC', ip: '172.16.255.131', Betriebssystemname: 'Windows 7', os.arch: 'amd64' , os.version: '6.1', java.version: '1.7.0_79' Session ID: 2e7ab2fd-cd6b-428e-86e7-a4f7d8d737fa Treiber Info: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{Plattform = WINDOWS, acceptSslCerts = true, javascriptEnabled = true, cssSelectorsEnabled = Wahr, databaseEnabled = true, browserName = firefox, handlesAlerts = true, nativeEvents = false, webStorageEnabled = true, drehbar = false, locationContextEnabled = true, applicationCacheEnabled = true, takesScreenshot = true, version = 47.0.1}] bei sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Mutter Verfahren) bei sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:57) bei sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) bei java.lang.reflect.Constructor.newInstance (Constructor.java : 526) unter org.openqa.selenium.remote.ErrorHandler.createThrowable (ErrorHandler.java:206) unter org.openqa.selenium.remote.Erro rHandler.throwIfResponseFailed (ErrorHandler.java:158) bei org.openqa.selenium.remote.RemoteWebDriver.execute (RemoteWebDriver.java:678) bei org.openqa.selenium.remote.RemoteWebElement.execute (RemoteWebElement.java: 327) bei org.openqa.selenium.remote.RemoteWebElement.sendKeys (RemoteWebElement.java:122) bei src.tests.EmailSignUp.test (EmailSignUp.java:107) bei src.tests.EmailSignUp.main (EmailSignUp .java: 27)

Edit 1:

In der Browser-Konsole die folgenden Klassen werden automatisch durch Winkel Js

Email_Console

bevölkert werden wird, kann ich nicht verstehen, wohin ich gehe falsch bei 2. textbox. Stellt der Winkelcode Probleme dar? Bitte helfen Sie ..

+0

Soweit ich sehen kann, ist in Ihrem Code nichts falsch. Ich schätze sein Problem mit der Seite selbst. Als Umgehung können Sie Explicit wait mit der erwarteten Sichtbarkeitsbedingung versuchen. – Siva

+0

versucht, dass .. Ich bekomme eine TimedOutException ... :( – Lucy

+0

Können Sie Werte manuell eingeben? Möglicherweise können Sie versuchen, die Zeitspanne zu vergrößern – Siva

Antwort

1

Mai sein, wenn Sie Element finden gehen, ist es nicht auf den DOM vorhanden sein würde, Sie versuchen WebDriverWait verwenden sollen, wie unten vorhanden, bis Element zu warten: -

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("[email protected]"); 

Edited1: - Wenn Sie sind nach wie vor das Problem während sendKeys(), ich denke, einige Javascript in Ihrem Elemente eingebettet, die ihn unsichtbar macht, in diesem Fall versuchen, Wert zu setzen JavascriptExecutor wie unter Verwendung von: -

WebElement signup_email = wait.until(ExpectedConditions.presenceOfElementLocated(By.name("email"))); 
((JavascriptExecutor)driver).executeScript("arguments[0].value = '[email protected]'", signup_email); 

Edited1: - Wenn Sie Element sichtbar, wenn nicht sicher, was genau css Arbeit in Ihrem Element machen möchten, aber unten ist die allgemeine Art und Weise ist, wie unten sichtbar zu machen: -

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("[email protected]"); 

Herausgegeben: - da ich dieses Element siehe Arbeiten mit angularjs ist, versuchen angularjs Sachen Wert auf diese einstellen JavascriptExecutor wie unten verwenden:

WebElement signup_email = wait.until(ExpectedConditions.presenceOfElementLocated(By.name("email"))); 

((JavascriptExecutor).executeScript("angular.element(arguments[0]).scope().email = arguments[1]", signup_email, "[email protected]"); 

Hoffe, es hilft ... :)

+0

Ich erhalte eine Ausnahme org.openqa.selenium.TimeoutException: Zeitüberschreitung nach 10 Sekunden auf die Sichtbarkeit von Element lo gewartet cated by By.name: E-Mail – Lucy

+0

@Lucy versuchen Sie dann mit 'ExpectedConditions.presenceOfElementLocated'..Siehe aktualisierte Antwort .. –

+0

Jetzt bekommen" ElementNotVisibleException " – Lucy