2016-07-22 34 views
1

Nach Überprüfung der Beiträge zu diesem Problem vor, aber das Problem besteht fort. http://preview.harriscountyfws.org/ ist eine öffentliche Website, die sich auf diese Frage bezieht.Selenium Webdriver ElementNotVisibleException mit Java

Ich versuche, auf ein Drop-Down-Menü zu klicken und "Channel Status" aus dem Drop-down Regenfall auszuwählen.

bekomme ich folgende Fehlermeldung:

Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: element not visible: Element is not currently visible and may not be manipulated

I Screenshot mit Code bin Befestigung, aber Sie können auch die Website besuchen und F12 auf den Code suchen drücken.

Hier ist meine aktuellen Code basiert auf Forschung, die ich bisher getan haben:

Select dropdown = new Select(driver.findElement(By.id("siteType"))); 

    WebElement triggerDropDown = driver.findElement(By.className("k-i-arrow-s")); 
    triggerDropDown.click(); 

    dropdown.selectByVisibleText("Channel Status"); 
    dropdown.selectByIndex(1); 

Weder der letzten beiden Codeanweisungen gezeigt Arbeit (dropdown.select ...) Beides führt in ElementNotVisibleException.

Nun, das ist nicht wahr, denn durch Drücken der triggerDropDown.Click(), sind die Auswahlmöglichkeiten sichtbar!

Click Here For Screenshot

Antwort

0

Dies ist ein seltsames. Ich konnte leicht auf das Dropdown klicken, aber das Klicken auf "Channel Status" funktionierte nicht. Es gibt etwas an diesem Dropdown, das nicht "normal" wirkt. Ich habe versucht, die typische WebDriverWait, aber es funktioniert nicht. Selenium wartet nicht richtig darauf oder etwas anderes passiert. Ich empfehle selten Thread.sleep(), aber in diesem Fall kann ich nicht umgehen.

Der folgende Code funktioniert.

String searchText = "Channel Status"; 
driver.findElement(By.cssSelector("span.k-widget.k-dropdown.k-header")).click(); 
Thread.sleep(1000); 
driver.findElement(By.xpath("//li[text()='" + searchText + "']")).click(); 
+0

besser. Ich werde warten, bis ich die Antwort akzeptiere, weil andere Leute antworten könnten und ich möchte sehen, was wir alle darüber lernen können. Mein Verdacht, und ich könnte falsch liegen, ist, dass der Bildschirm vielleicht in Panels unterteilt ist, und Sie müssen irgendwie das eine oder andere Panel auswählen, um Komponenten in diesem Panel "sichtbar" zu machen –

+0

JeffC. In der zweiten Zeile sagen Sie "driver.findElement (By.cssSelector (" span.k-widget.kdropdown.k-header ")). Click. Wird nur das erste Vorkommen von?Jetzt, da ich bereit bin, etwas aus dem aktuellen Tab "Niederschlag in der letzten X-Zeit" auszuwählen, habe ich ein Problem, weil das umgebende Element dafür auch "span.k-widget.kdropdown.k-header" heißt. Das ist also eine Herausforderung. Wenn es darauf basiert, das erste Vorkommen dieses Textes zu finden, dann ist es wiederum kein optimaler Code. –

+0

Ja, es ist die erste zu finden. Wenn Sie etwas anderes als das erste auswählen müssen, müssen Sie den Selektor ändern. – JeffC

1

den Code unten verwenden:

driver.get("http://preview.harriscountyfws.org/"); 
driver.manage().window().maximize(); 
Thread.sleep(2000);//use wait using until instead of this wait 

WebElement elem = driver.findElement(By.xpath("//span[text() = 'Rainfall']")); 
elem.click(); 
Thread.sleep(2000); 

for(int i = 0; i <= 2; i++){//2 is used bacause u have 2 options 
    Actions actions = new Actions(driver); 
    actions.sendKeys(Keys.DOWN).build().perform();//press down arrow key 
    Actions actions2 = new Actions(driver); 
    actions2.sendKeys(Keys.ENTER).build().perform();//press enter 
} 

diese auf Kanal Statustaste klicken wird.

+0

Ihr Code funktioniert. Ich mag es nicht, auf Ordnung und Keydown zu vertrauen. Ich würde es gerne so machen, dass das Skript besser wartbar ist. Zumindest funktioniert es aber. Das ist gut. Ich habe versucht, dir zuzustimmen. Aber ich konnte nicht, weil ich neu bin und keine "Reputation" habe. Ich glaube nicht, dass es eine Herabstufung wert ist. Es ist eine gute Antwort. Ich hoffe auf etwas Besseres. Also, jetzt halte ich diese Frage offen. –

+0

Wenn wir Testskript schreiben, versuchen wir, sie so zu machen, dass Sie nicht oft zurückgehen müssen. Jetzt, hier, wenn Sie Artikel hinzufügen, ändern Reihenfolge der Artikel in Box, etc. Dinge funktionieren nicht wie erwartet. Auch könnte ich den Standard nicht "Regenfall" in meinem Dropdown, sondern etwas anderes machen. Methoden wie "selectbyvisibletext" wären nicht existent, wenn dies der einzige Weg ist. Wenn es einen technischen Grund gibt, warum Ihr der einzige Weg ist, dann können wir vielleicht freundliche Methoden entwickeln, die den Index eines bestimmten Textes usw. finden - und versuchen, das Ganze nicht so sehr auf Faktoren zurückzuführen, die sich ändern. –

+0

In der Schleife können Sie Index no .... Ich werde meine ans später aktualisieren, damit Sie es wiederverwenden können .... Ich bin nicht vor meinem Laptop jetzt .... danke – noor

Verwandte Themen