2017-02-17 2 views
1

Warum klickt mein Code nicht zuverlässig auf den Dropdown-Menüeintrag?Warum klickt mein Code nicht zuverlässig auf den Dropdown-Menüeintrag?

  1. Mein Code dosnt zuverlässig auf den gewünschten Dropdown-Menüeintrag.
  2. Zum Beispiel, wenn ich den gleichen Test 100 mal ausführen, würden 12 der Tests fehlschlagen, weil die Methode den gewünschten Menüpunkt nicht auswählen würde sagen (Mr), auch mit Send-Tasten das gleiche Problem auftritt.
  3. Ich habe eine Wartezeit von x30 Sekunden warten auf das Element zu sehen, sogar warten auf das Element anklickbar sein das gleiche Problem auftritt.
  4. Zum Beispiel finden Sie im folgenden Artikel dropwdown:

    <select id="titlefield" class="form-control ng-pristine ng-untouched ng-invalid ng-invalid-required" name="Salutation" ng-model="PersonalDetails.Salutation" ng-options="salut.id as salut.id for salut in Salutations" ng-required="FlowData.IsGuest" required="required"> 
    <option class="ng-binding" value="">Please select</option> 
    <option value="0" label="Mr.">Mr.</option> 
    <option value="1" label="Miss">Miss</option> 
    <option value="2" label="Mrs.">Mrs.</option> 
    <option value="3" label="Ms.">Ms.</option> 
    <option value="4" label="Dr.">Dr.</option> 
    

  5. Mein Code aus folgendem aufgebaut ist:

    public void selectTitleFromDropdownMenu(WebElement dropdown, String textToSearchFor) { 
    Wait<WebDriver> tempWait = new WebDriverWait(this.driver, 30); 
    try { 
        tempWait.until(ExpectedConditions.visibilityOf(dropdown)); 
        List<WebElement> options = dropdown.findElements(By.tagName("option")); 
        Select selectDropdown = new Select(dropdown); 
        for (int i = 0; i < options.size(); i++) { 
         if (options.get(i).getText().equals(textToSearchFor)) { 
          selectDropdown.selectByVisibleText(textToSearchFor); 
          System.out.println("Successfully selected the following text: " + textToSearchFor + ", using the following webelement: " + "<" + dropdown.toString() + ">"); 
         } 
        } 
    
    }catch(Exception e) { 
        System.out.println("Unable to select the following text: " + textToSearchFor + ", using the following WebElement: " + "<" + dropdown.toString() + ">"); 
        Assert.assertFalse(true, "Unable to select the required text from the dropdown menu, Exception: " + e.getMessage()); 
    } 
    

    }

enter image description here

+0

zur Lösung finden Sie hier zur Verfügung gestellt. Es wird dir helfen. http://stackoverflow.com/questions/30184055/selenium-select-value-from-a-drop-down-which-ispendent-on-value-selected-in – Abhinav

Antwort

0

Sie müssen das Auswahlobjekt im Dropdown-Menü und nicht in den Optionen erstellen. Außerdem benötigen Sie keine for-Schleife.

List<WebElement> options = dropdown.findElements(By.Id("titlefield")); 
Select selectDropdown = new Select(dropdown); 
selectDropdown.selectByVisibleText(textToSearchFor); 
+0

danke für den Kommentar, wie würde die Liste Objekt speichert die Werte der Liste, wenn sie nur auf das ausgewählte Element verweist? – Gbru

+0

@ Phil_P85 Ich nicht die interne Webdriver-API, aber so funktioniert es. –

+0

ok @Gaurang Shah danke nochmal Ich werde es versuchen – Gbru

0

können Sie versuchen, mit diesem auch:
Select selectDropdown = new Select(driver.findElement(By.id("titlefield"))); selectDropdown.selectByVisibleText(textToSearchFor);

+1

selectDropdown.selectByVisibleText ("textToSearchFor"); - textToSearchFor sollte nicht in Anführungszeichen stehen ... Sonst sucht Selen nach dieser Zeichenkette und nicht nach dem Inhalt der Variablen textToSearchFor. – Grasshopper

Verwandte Themen