2017-02-17 17 views
1

Почему мой код не надежно нажимает на выпадающий пункт меню?Почему мой код не надежно нажимает на выпадающий пункт меню?

  1. Мой код dosnt надежно нажимает на пункт меню выпадающего меню.
  2. Например, если я выполнил один и тот же тест 100 раз, 12 тестов потерпит неудачу, потому что метод не будет выбирать намеченный пункт меню, скажем (Mr), даже используя клавиши отправки, возникает одна и та же проблема.
  3. Я установил время ожидания x30 секунд, ожидая, пока элемент станет видимым, даже ожидая, что элемент будет доступен для клика по той же самой проблеме.
  4. Например смотрите следующий пункт: 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. Мой код строится из следующих действий:

    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

Обратитесь к решению представленной здесь. Это поможет вам. http://stackoverflow.com/questions/30184055/selenium-select-value-from-a-drop-down-which-is-dependent-on-value-selected-in – Abhinav

ответ

0

Вам нужно создать объект выбора в раскрывающемся меню, а не в параметрах. Кроме того, вам не нужен цикл.

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

спасибо за комментарий, как бы List item сохраняет значения списка, если он ссылается только на элемент select? – Gbru

+0

@ Phil_P85 Я не являюсь внутренним интерфейсом API webdriver, но так оно и работает. –

+0

ok @Gaurang Shah еще раз спасибо, я дам ему попробовать – Gbru

0

Вы можете попробовать с этим также:
Select selectDropdown = new Select(driver.findElement(By.id("titlefield"))); selectDropdown.selectByVisibleText(textToSearchFor);

+1

selectDropdown.selectByVisibleText ("textToSearchFor"); - textToSearchFor не должен быть в двойных кавычках ... Else selenium будет искать эту строку, а не содержимое переменной textToSearchFor. – Grasshopper