Значения из списка не совпадают с моей строкой - PullRequest
0 голосов
/ 23 января 2020

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

  1. Я попросил выбрать значение = "Соединенные Штаты", но он выбирает Албанию
  2. Выдает исключение устаревшего элемента.

Я не могу понять, что происходит.

void selectFromDropdown(WebElement webName, String valtoSelect){
        WebElement dropdown = webName;
        dropdown.click(); // assuming you have to click the "dropdown" to open it
        List<WebElement> options = dropdown.findElements(By.tagName("li"));
            for (WebElement option : options)
            {
                if (option.getText().equals(valtoSelect))
                {
                    option.click(); // click the desired option
                }
                break;
            }
        }

enter image description here

<input aria-invalid="false" autocomplete="off" id="disable-clearable" placeholder="Country of Registration" type="text" class="MuiInputBase-input MuiInput-input MuiAutocomplete-input MuiAutocomplete-inputFocused MuiInputBase-inputAdornedEnd" aria-autocomplete="list" autocapitalize="none" spellcheck="false" value="">

Проблема, которую я вижу, заключается в том, что для автоматического раскрывающегося списка я нажимаю на этот элемент "//*[@id='disable-clearable']" и затем проверяю ul "//ul[@role='listbox']"

Ответы [ 3 ]

1 голос
/ 23 января 2020

Если параметры доступны в HTML, вы можете выбрать элемент из выпадающего списка тремя способами:

@Test(testName = "select by tekst")
public void selectByVisibleTekst(){
    WebElement country= driver.findElement(By.xpath("locatorValue"));
    new Select(country).selectByVisibleText("tekstToSelect");
}

@Test(testName = "select by value")
public void selectByValue(){
    WebElement country= driver.findElement(By.xpath("locatorValue"));
    new Select(country).selectByValue("valueToSelect");
}

@Test(testName = "select by index")
public void selectByIndex(){
    WebElement country= driver.findElement(By.xpath("locatorValue"));
    new Select(country).selectByIndex(valueOfIndex);
}
0 голосов
/ 24 января 2020

После получения отзывов от различных друзей здесь и некоторых исследований, у меня сработал метод, описанный ниже.

public void selectCountry(){
        String valtoSelect = "United States";
        countryOfReg.click();
        List<WebElement> webMom = Collections.singletonList(driver.findElement(By.xpath("//ul[@role='listbox']")));
        for (int i = 0; i <= webMom.size(); i++) {
            System.out.println(driver.findElement(By.xpath("//*[@id='disable-clearable-option-"+i+"']")).getText());
            if (driver.findElement(By.xpath("//*[@id='disable-clearable-option-"+i+"']")).getText().equals(valtoSelect)){
                driver.findElement(By.xpath("//*[@id='disable-clearable-option-"+i+"']")).click();
                break;
            }
        }
    }
0 голосов
/ 23 января 2020

Если раскрывающийся список действительно является полем выбора, тогда должен работать следующий код

void selectFromDropdown(WebElement webName, String valtoSelect){
    Select select = new Select(webName)));
    select.selectByVisibleText(valtoSelect);
    // or maybe select.selectByValue(valtoSelect); depending how you setup the dropdown
}

, где Select равен org.openqa.selenium.support.ui.Select

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...