2016-05-04 11 views
0

Ich schreibe ein Selen-Skript mit Java.Kann mein Element nicht sichtbar in Selen

In meinem Szenario, ich habe eine Auswahltaste und eine OK-Taste. Die Auswahltaste ist aktiviert und die OK-Schaltfläche ist beim ersten Laden der Seite deaktiviert. Wenn ich auf den Auswahlknopf klicke, erscheint ein Popup-Fenster.

Dann wähle ich ein Datum von einem Datumsauswahl in dem Pop-up-Fenster. Nach Auswahl des Datums klicke ich im Popup-Fenster auf Bestätigen. Nach einem Klick auf die Schaltfläche "Bestätigen" wird das Popup-Fenster geschlossen und die Schaltfläche "Jetzt buchen" aktiviert.

Das ist mein Testszenario. Aber wenn ich das starte, scheitert mein Test an dem Punkt, an dem ich auf die Schaltfläche Jetzt buchen klicke.

So verwendete ich FluentWait dies zu erholen. Aber wenn ich meinen Code ausführe, ignoriert er einfach den FluentWait-Teil und führt den Code aus.

Kann mir jemand sagen, wie mein Skript zu klicken Sie auf OK-Taste.

Hier ist mein Code.

// Select Days 
driver.findElement(By.xpath("//div[@id='myModal0']/div/div/div[2]/div/div[2]/div/div/input")).click(); 
driver.findElement(By.xpath("//div[@id='ui-datepicker-div']/table/tbody/tr[3]/td[5]/a")).click(); 
System.out.println("User Selected the days the service is offered"); 

Thread.sleep(4000); 

// Click Confirm Button 
driver.findElement(By.xpath("//div[@id='myModal0']/div/div/div[2]/div/div[6]/button")).click(); 
System.out.println("User clicked Confirm Button"); 

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

// Click Book Now Button 
//driver.findElement(By.xpath("//tr[@id='0']/td[6]/button")).click(); 
//System.out.println("User Clicked Book Now Button"); 


System.out.println("aaaaaaaaaa"); 

class CheckForFoo implements Function<WebDriver,WebElement> { 
    @override 
    public WebElement apply(WebDriver driver) { 
      return driver.findElement(By.xpath("//tr[@id='0']/td[6]/button")); 
    } 
} 

FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver)  
    .withTimeout(30, TimeUnit.SECONDS)  
    .pollingEvery(5, TimeUnit.SECONDS) 
    .ignoring(NoSuchElementException.class); 

WebElement foo = (WebElement) wait.until(new CheckForFoo()); 

System.out.println("bbbbbbbbbb"); 

Vielen Dank im Voraus. :)

  • bearbeiten -

Bevor ich FluentWait verwendet bekam ich folgende Fehlermeldung.

Exception in thread "main" org.openqa.selenium.WebDriverException: Element ist nicht anklickbare am Punkt (1460,7666015625, 159,03334045410156). Anderes Element würde den Klick erhalten: Befehlsdauer oder Timeout: 84 Millisekunden Build-Info: Version: '2.53.0', Revision: '35ae25b', Zeit: '2016-03-15 17:00:58' Systeminfo : host: 'ET_LAHIRU', ip: '192.168.1.4', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_25' Treiberinfo: org.openqa.selenium.firefox.FirefoxDriver Funktionen [{applicationCacheEnabled = true, rotierbar = false, handlesAlerts = true, databaseEnabled = true, Version = 45.0.1, Plattform = WINDOWS, nativeEvents = false, acceptSslCerts = true, webStorageEnabled = true, browserName = firefox, takesScreenshot = true, javascriptEnabled = true, cssSelectorsEnabled = true}] Sitzungs-ID: 16e51961-3d8c-4c31-9dec-547d04235eac bei sun.reflect.NativeConstructorAccessorImpl .newInstance0 (native Methode) bei sun.reflect.NativeConstructorAccessorImpl.newInstance (Unknown Source) bei sun.reflect.DelegatingConstructorAccessorImpl.newInstance (Unknown Source) bei java.lang.reflect.Constructor.newInstance (Unknown Source) bei org .openqa.selenium.remote.ErrorHandler.createThrowable (ErrorHandler.java:206) bei org.openqa.selenium.remote.ErrorHandler.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.click (RemoteWebElement.java:85) bei selrcdemo .Aktivitäten.Aktivitäten (Activities.java:9 7) bei selrcdemo.ayubomain.main (ayubomain.java:69)

Aber nach der Zugabe von FluentWait keine Fehler. Aber es macht nicht was ich will.:)

+0

plz Ihre Fehler Post als auch –

+0

hinzugefügt. Bitte sieh es dir an. :) –

+0

sieht aus wie Problem nicht im Zusammenhang mit warten. zuerst zu Element wechseln und dann klicken. –

Antwort

1

Hallo wie pro Ausnahme bitte zuerst

Thread.sleep(5000); 

wie

auf dem Book Now Knopf etwas warten, bevor klicken, wird es funktionieren,

und auch als pro Fehler gibt es keine Notwendigkeit zu verwenden fließend warten, denn was fließend wartet, ist, dass es nach dem Element im DOM sucht und in dem Moment, in dem es es findet, erlaubt es die nächste Aktion zu beginnen. Deshalb hat es, wenn Sie fließend angewendet haben, nichts getan, weil Element im DOM verfügbar war.

aber wenn Sie es verstehen wollen der Fehler dann sagt es eindeutig Element ist nicht anklickbar (1460.7666015625, 159.03334045410156) was bedeutet, dass Element innerhalb des DOM vorhanden ist, aber nicht eine feste Position, daher erfordert es einige zusätzliche Zeit, um feste Position zu erhalten (Thread.sleep (5000);)

Hoffnung, dies hilft Ihnen

+0

Vielen Dank Ihre Suggestion funktioniert. :) –

Verwandte Themen