2016-08-24 2 views
0

Ich versuche Text (111) in Textfelder einzugeben und ich habe fast alle Element-Locators, Javascript-Tricks versucht und der Text wird einfach nicht in die Felder eingegeben.Selenium Webdriver: Eingabe von Text in Textfeld - Element nicht sichtbar

Ich habe versucht:

driver.findElement(By.xpath("//div[@class='input-wrapper icon wupid']")).sendKeys("111"); 
Thread.sleep(2000); 

Fehler:

Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: element not visible

der HTML-Code:

<form id="form-resetpass" method="post" action="" _lpchecked="1"> 
<div class="input-wrapper icon wupid"> 
<label for="wupid">תעודת זהות</label> 
<input class="only-numbers ltr" type="text" value="" maxlength="9" name="wupid" style="background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAAXNSR0IArs4c6QAAAPhJREFUOBHlU70KgzAQPlMhEvoQTg6OPoOjT+JWOnRqkUKHgqWP4OQbOPokTk6OTkVULNSLVc62oJmbIdzd95NcuGjX2/3YVI/Ts+t0WLE2ut5xsQ0O+90F6UxFjAI8qNcEGONia08e6MNONYwCS7EQAizLmtGUDEzTBNd1fxsYhjEBnHPQNG3KKTYV34F8ec/zwHEciOMYyrIE3/ehKAqIoggo9inGXKmFXwbyBkmSQJqmUNe15IRhCG3byphitm1/eUzDM4qR0TTNjEixGdAnSi3keS5vSk2UDKqqgizLqB4YzvassiKhGtZ/jDMtLOnHz7TE+yf8BaDZXA509yeBAAAAAElFTkSuQmCC"); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: left center;"> 
</div> 

, warum ich den Wert eingeben kann nicht?

+0

Ihr Treiber ist schneller als Ihre Rendering-Engine. Sie müssen warten, bis das Objekt geladen ist (d. H. Es ist sichtbar) und dann können Sie darauf zugreifen. Beachten Sie auch, dass, nur weil es in der HTML sichtbar ist, es möglicherweise aus der CSS versteckt ist. –

Antwort

1

Bitte versuchen Sie den folgenden Code. Bitte nicht, dass es in C# ist, bitte konvertieren Sie es in Java-Format.

WebDriverWait mywait = new WebDriverWait(driver,TimeSpan.FromSeconds(30)); 
IWebElement txtbox = mywait.Until(ExpectedConditions.ElementIsVisible(By....)); 
txtbox.SendKeys("111"); 
3

Sie können wait-Konzept dafür verwenden.

Implizite Warten:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

oder Sie explizite Warte + erwartete Bedingung verwenden:

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(
     ExpectedConditions.visibilityOfElementLocated(By.id("someid"))); 

hoffen, dass dies Ihr Problem

+0

danke für Ihre Antwort, aber nachdem ich Implizite Wait habe ich einen Fehler: _Exception in Thread "Haupt" org.openqa.selenium.TimeoutException: Zeitüberschreitung nach 10 Sekunden warten auf Sichtbarkeit des Elements von By.xpath:// div [@ class = 'Eingabe-Wrapper-Symbol wupid'] _ Dies ist nicht das Problem zu lösen – Amir

+0

Überprüfen Sie zuerst, ob Xpath gültig ist oder nicht, können Sie in Firefox überprüfen. – rajan

+0

Um Stabilität in Ihrem Framework zu erhalten, sollten Sie explizit warten. – rajan

0

Unter Berücksichtigung Ihrer HTML-Code, lösen gibt es Textfeld nur im Eingabe-Tag. Sie können also diesen xpath verwenden: "// input [@ class = 'only-numbers ltr']" und explizite wait verwenden.

Verwandte Themen