t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как выбрать значение из выпадающего меню?

Теги: #<Tag:0x00007f07fed3c860> #<Tag:0x00007f07fed3c748> #<Tag:0x00007f07fed3c630>

Добрый день.

Не могу выбрать значение 10 Minutes для выпадающего меню для Paste Expiration на сайте pastebin.com.

Я попытался выполнить команду inspect для выпающего списка Paste Expiration, нахожу данный элемент, но сами элементы списка находятся на уровень выше. Не могу представить как получить значение.


Можете подсказать как решить данную проблему?

 Select dropDown = new Select(driver.findElement(By.id("postform-expiration")));
 dropDown.selectByVisibleText("10 Minutes");

А так, вообще-то учитесь гуглить.
selenium select
2-3 ссылка уже помогает.

У вебдрайвера есть SelectElement в него передайте елемент, который найдете по id postform-exparation, и выберете по тексту, там будет метод, если не сработает, например select сразу не появляется, тогда перед этим кликните по dropdown кнопке

К сожалению, не помогает так.

    public MainPage createNewPastebinElement() {
        pasteBtn.click();
        inputCode.sendKeys("Hello from WebDriver");
        findPasteExpiration.click();
        WebElement element = driver.findElement(By.xpath("//*[@id='postform-expiration']"));
        Select dropDown = new Select(element);
        dropDown.selectByVisibleText("10 Minutes");
        inputPasteName.sendKeys("helloweb");
        createPasteBtn.click();
        return this;
    }

В этом месте попадаю на исключение dropDown.selectByVisibleText(“10 Minutes”);
Исключение: rg.openqa.selenium.ElementNotInteractableException: element not interactable: Element is not currently visible and may not be manipulated

Вам надо открыть dropdown, если вы уже это сделали, но не работает, поставьте задержку после клика, а лучше дождитесь пока первый элемент в списке visible

Правильно ли я Вас понял?

public MainPage createNewPastebinElement() {
        WebDriverWait wait = new WebDriverWait(driver, 20);
        pasteBtn.click();
        inputCode.sendKeys("Hello from WebDriver");
        findPasteExpiration.click();
        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@id='postform-expiration']//option[text() = 'Never']"))));
        WebElement element = driver.findElement(By.xpath("//select[@id='postform-expiration']"));
        Select dropDown = new Select(element);
        dropDown.selectByValue("10M");
        inputPasteName.sendKeys("helloweb");
        createPasteBtn.click();
        return this;
    }

Ничего что элемент изменятся динамически?
https://recordit.co/yeQikzsWES

да верно, но я бы локатор так написал //*[@id=‘postform-expiration’]//option[1], вдруг текст поменяется

Нет, к сожалению результат тот же. Ожидание 20 секунд и ошибка…
Ничего что элемент изменятся динамически?
https://recordit.co/yeQikzsWES

а что там в span у вас в низу, может там еще список?

так зайдите на сайт и посмотрите, там контейнер дропдауна отдельно появляется в DOM после нажатия на поле

надо просто локатор написать, который будет кликать в 10 минут

2 Симпатий

//ul[@role = ‘listbox’]/li

вот коллекция значений в дропдауне, в ней ищем по тексту нужную и кликаем

Благодарю, смог!)