2016-08-02 19 views
0

ich auf einer öffentlichen Website arbeite:
http://preview.harriscountyfws.org/ElementNotVisible Ausnahme Selen WebDriver Java

Die Logik unten trifft auf den ElementNotVisibleException gezeigt. Wenn Sie jedoch die beiden Zeilen, die mit "//" beginnen, auskommentieren und die zwei Zeilen über diesem Code auskommentieren, funktioniert der Code einwandfrei (allerdings für ein anderes Dropdown-Menü als das, das ich möchte).

So bin ich verwirrt. Ich kann aus "Niederschlag in der letzten" Dropdown-Liste auswählen. Aber mit genau der gleichen Methode kann ich nicht aus dem Dropdown-Menü "Gage nach Ort" auswählen.

Wie wähle ich aus der Drop-down-Liste "Gage nach Standort" aus?

package sdfwe.sdwd.qsde; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class Gfgsdrfffde { 
    public static void main(String[] args) { 
     System.out.println("Running Tests...."); 
     // Optional, if not specified, WebDriver will search your path for chromedriver. 
     System.setProperty("webdriver.chrome.driver", "C:\\ChromeDriver\\chromedriver.exe"); 
     WebDriver driver = new ChromeDriver(); 
     driver.get("http://preview.harriscountyfws.org/"); 
     driver.manage().window().maximize(); 
     WebElement we; 
     String searchText; 
     WebElement dropdown; 
     //if you comment out the next two lines after these comments and 
     // uncomment out the commented lines below, the code works 
     searchText = "110:A100_110 Clear Creek @45"; 
     dropdown = driver.findElements(By.cssSelector("span.k-widget")).get(3); 
    //  searchText = "24 Hours"; 
    //  dropdown = driver.findElements(By.cssSelector("span.k-widget")).get(1); 
     System.out.println("Attempting Dropdown Click...."); 
     dropdown.click(); 
     System.out.println("Finished running Dropdown Click...."); 
     Sleep(4); 
     //Select dd2 = new Select(driver.findElement(By.id("ddlTimeSpan"))); 
     //dd2.selectByVisibleText(searchText); 
     we = driver.findElement(By.xpath("//li[text()='" + searchText + "']")); 
     if (we != null) { 
      we.click(); 
     } 
     System.out.println("Finished Selecting Dropdown...."); 
     //driver.quit(); 
    } 
    public static void Sleep(int i) 
    { 
     try { Thread.sleep(i * 300); } 
     catch(InterruptedException ie) { System.out.println("Unexpected error in sleep"); } 
    } 
} 
+0

Die Auswahl per Index ist immer ziemlich unzuverlässig. Entweder müssen Sie überprüfen, was in der Tat 'driver.findElements (By.cssSelector (" span.k-widget "))' zurückgegeben und stellen Sie sicher, dass Sie das richtige Element auswählen, oder warum nicht ein gewünschtes Element direkt auswählen, z. 'driver.findElement (By.xpath (" // span [text() = '(Wählen Sie Gage)'] "));' –

Antwort

0

habe ich versucht, den Code, und Sie müssen diese Änderungen vorzunehmen, damit es funktioniert:

searchText = "110:A100_110 Clear Creek @ I-45"; 
    dropdown = driver.findElement(By.cssSelector("span[aria-owns='ddlGage_listbox']")); 

Hier ist die volle Arbeits Code aus Ihrem Beispiel oben basiert.

 public static void main(final String[] args) { 
    System.out.println("Running Tests...."); 
    // Optional, if not specified, WebDriver will search your path for 
    // chromedriver. 
    System.setProperty("webdriver.chrome.driver", "C:\\ChromeDriver\\chromedriver.exe"); 
    final WebDriver driver = new ChromeDriver(); 
    driver.get("http://preview.harriscountyfws.org/"); 
    driver.manage().window().maximize(); 
    WebElement we; 
    String searchText; 
    WebElement dropdown; 
    // if you comment out the next two lines after these comments and 
    // uncomment out the commented lines below, the code works 
    searchText = "110:A100_110 Clear Creek @ I-45"; 
    dropdown = driver.findElement(By.cssSelector("span[aria-owns='ddlGage_listbox']")); 
    // searchText = "24 Hours"; 
    // dropdown = 
    // driver.findElements(By.cssSelector("span.k-widget")).get(1); 
    System.out.println("Attempting Dropdown Click...."); 
    dropdown.click(); 
    System.out.println("Finished running Dropdown Click...."); 
    Sleep(4); 
    // Select dd2 = new Select(driver.findElement(By.id("ddlTimeSpan"))); 
    // dd2.selectByVisibleText(searchText); 
    we = driver.findElement(By.xpath("//li[text()='" + searchText + "']")); 
    if (we != null) { 
     we.click(); 
    } 
    System.out.println("Finished Selecting Dropdown...."); 
    // driver.quit(); 
} 

Auch für einfache Selen-Skripte, könnten Sie https://github.com/codezombies/easytest überprüfen möchten.

Hier ist das gleiche Skript mit easytest Framework.

public static void main(String[] args) throws Exception { 

    try(EasyTest easy = new EasyTest(DriverType.CHROME)) { 


     easy.start("http://preview.harriscountyfws.org/"); 

     easy.newPage(page -> { 
      page.click("span[aria-owns='ddlGage_listbox']"); 

      final String searchText = "110:A100_110 Clear Creek @ I-45"; 
      page.executeIn("#ddlGage_listbox", container -> { 
       page.click("//li[text()='" + searchText + "']"); 
      }); 

     }); 
    } 
} 
+0

zu erhöhen Ich habe Ihren ersten Code versucht. Ich habe: Versuch Dropdown-Klick .... Fertig läuft Dropdown-Klick .... Ausnahme im Thread "Haupt" org.openqa.selenium.NoSuchElementException: kein solches Element: Konnte Element nicht finden: {"method": "xpath "," Selektor ":" // li [text() = '110: A100_110 Clear Creek @ I-45'] "} Ich denke, es passiert auf der we = driver.findelement Zeile, weil" Finished Running Dropdown klicken. .. "gedruckt, obwohl ich das Dropdown mit allen Wahlen nicht sah. –

+0

sevenFLip, damit ich dieses Ding zur Arbeit bringen konnte, musste ich den Code auskommentieren: "printf (Fertig Auswahl Dropdown"). Ich weiß es nicht. Das ist bizarr. –

+0

@SirFartsalot das kann es aber nicht sein. :(kannst du versuchen zwischen die anrufe schlafen zu legen. ich denke was passiert ist, dass einige elemente noch nicht richtig geladen sind, bevor sie aktivitäten ausgewählt und gesetzt haben. – sevenFLiP

0

Sie können dies versuchen:

WebDriverWait wait = new WebDriverWait(driver, 10); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("select#ddlGage"))); 
    Select gageByLocationSelect = new Select(driver.findElement(By.cssSelector("select#ddlGage"))); 
    gageByLocationSelect.selectByVisibleText("110:A100_110 Clear Creek @ I-45"); 

Hoffnung das wird Ihnen helfen !!

+0

Sie hatten einige Syntaxfehler, die ich behoben habe, aber es hat nicht funktioniert. gleiches Problem. org.openqa.selenium.ElementNotVisibleException –

+0

aktualisiert meine Antwort .. –

+0

hat immer noch Syntaxfehler, aber ich habe sie behoben. Nein, hat nicht funktioniert. Ausnahme im Thread "main" org.openqa.selenium.TimeoutException: Zeitüberschreitung nach 10 Sekunden Warten auf Sichtbarkeit des Elements von By.cssSelector: –