Selenium Webdriver - Невозможно открыть и выбрать значение из DropDown - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь открыть и выбрать значение из Passengers Dropdown, но безуспешно.

Фрагмент кода:

public class SpiceJetTest {
    public static void main(String[] arge) {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Liel PC\\Desktop\\TEST\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.spicejet.com");

        Select s = new Select(driver.findElement(By.id("ctl00_mainContent_ddl_Adult")));    // id for Adult
        s.deselectByValue("2");
    }
}

Не могли бы вы подсказать, как это сделать правильно?

Ответы [ 3 ]

0 голосов
/ 27 марта 2020

Я не знаю, какую версию вы используете:

Вот мой Код, который работает (Для Chrome 80)

редактировать: после работы над ним возникает проблема времени ожидания ( страница еще не загружена)

попробуйте:

public static void main(String[] arge) throws InterruptedException {

    System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    WebDriverWait ww= new WebDriverWait(driver, 20 ,2000);
    driver.get("https://www.spicejet.com");

    ExpectedCondition<Boolean> conditionToCheck = new ExpectedCondition<Boolean>()
    {
        @Override
        public Boolean apply(WebDriver input) {
            //return (input.findElements(By.id("divpaxinfo")).size() > 0);
             return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("loaded")
                     || ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
        }

    };
    ww.until(conditionToCheck);
    driver.findElement(By.id("divpaxinfo")).click();
     Select s = new Select(driver.findElement(By.id("ctl00_mainContent_ddl_Adult")));
    s.selectByValue("2");

}
0 голосов
/ 27 марта 2020

Ваш селектор нашел для меня 2 элемента. Этот css селектор: # adultDropdown # ctl00_mainContent_ddl_Adult нашел тот, который вам нужен. Этот вид метода может использоваться для ожидания элемента перед его взаимодействием:

public static void waitForElementPresent(this IWebElement element)
        {
            try
            {
                wait.Until(driver => element.Displayed);
            }
            catch (Exception e)
            {
                Assert.Fail("The element not found. The exception: \n" + e.GetType());
            }
        }

После того, как элемент найден, вы можете создать Select и использовать это: selectByValue ("2" ); метод выбора необходимого значения. Это метод в основном для работы с IWebElements. Если вы их не используете, то это может быть использовано для вас:

System.setProperty("webdriver.chrome.driver", "C:\\Users\\Liel PC\\Desktop\\TEST\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.spicejet.com");
        By elem = By.CssSelector("#adultDropdown #ctl00_mainContent_ddl_Adult");
        var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60))
        try
            {
                wait.Until(dr => ExpectedConditions.ElementIsVisible(element));
            }
            catch (WebDriverTimeoutException wte)
            {
                Logger.Info($"Timeout during wait. Exception: {wte.Message}");
            }
        Select s = new Select(driver.findElement(elem));    // id for Adult
        s.deselectByValue("2");
0 голосов
/ 26 марта 2020

Оно скрыто, пока вы не нажмете на ПАССАЖИРЫ. пожалуйста, используйте код ниже, чтобы решить вашу проблему.

Существует несколько способов выбора опции с выпадающим списком:

 1. selectByVisibleText() 
 2. selectByValue()  
 3. selectByIndex()

Решение для выбора значения с помощью selectByVisibleText

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Liel PC\\Desktop\\TEST\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        String baseURL = "https://www.spicejet.com/";

        driver.get(baseURL);

        driver.findElement(By.id("divpaxinfo")).click();

        Select drpAdult = new Select(driver.findElement(By.name("ctl00_mainContent_ddl_Adult")));
        drpAdult.selectByVisibleText("1");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...