Selenium выбирает неправильный вариант выпадающего меню из-за JavaScript - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть открытый url , где я пытаюсь проверить список зон (восток, запад и т. Д.) И список штатов (штатов) в каждой зоне.Раскрывающийся список зон приводит к раскрытию состояний.Оба выбранных выпадающих списка имеют JavaScript.Я написал следующий код, но этот код возвращает мне состояния первой зоны для каждой последующей зоны.Не удалось получить правильные состояния для зоны.

WebElement zoneDropDownElement = driver.findElement(By.xpath("//select[@id='ddlDealerZone'] | //select[@name='ddlDealerZone']"));
    Select zoneDropDown = new Select(zoneDropDownElement);

    //Get all options
    List<WebElement> zdd = zoneDropDown.getOptions();

    for (int j = 0; j < zdd.size(); j++) {
        System.out.println(zdd.get(j).getText());
        //zoneDropDown.selectByIndex(j);

        zoneDropDown.getOptions().get(j).click();
        jse.executeScript("$(arguments[0]).change();",zoneDropDown.getOptions().get(j));
        WebElement stateDropDownElement = driver.findElement(By.xpath("//select[@id='ddlDealerState'] | //select[@name='ddlDealerState']"));
        //stateDropDownElement.click();
        jse.executeScript("$(arguments[0]).change();", driver.findElement(By.xpath("//select[@id='ddlDealerState'] | //select[@name='ddlDealerState']")));

        Select stateDropDown = new Select(stateDropDownElement);
        List<WebElement> sdd = stateDropDown.getOptions();
        for (int k = 0; k < sdd.size(); k++) {
            System.out.println("        " + sdd.get(k).getText());
        }

click () должен был запустить метод javascript _doPostBack (zone, '').Следующее тоже не помогло.

jse.executeScript("_doPostBack(arguments[0],'');", zdd.get(j).getText());

Я получаю следующий вывод.Тот же набор состояний повторяется для северной и восточной зоны

    North
        Chandigarh
        Delhi
        Haryana
        Himachal Pradesh
        Jammu and Kashmir
        Punjab
        Rajasthan
        Uttar Pradesh
        Uttrakhand
East
        Chandigarh
        Delhi
        Haryana
        Himachal Pradesh
        Jammu and Kashmir
        Punjab
        Rajasthan
        Uttar Pradesh
        Uttrakhand

1 Ответ

0 голосов
/ 24 сентября 2018

JavaScript не проблема.Вам просто нужно подождать после нажатия следующего значения раскрывающегося списка зон.Попробуйте следующий код

private WebDriver driver;

@Test
public void printZoneAndStates() throws InterruptedException {
    // ChromeDriverManager.getInstance().forceCache().setup();
    driver = new ChromeDriver();
    driver.manage().window().maximize();

    driver.get("https://www.bharatpetroleum.com/Bharat-Petroleum-For/Business-Associates/dealership-data.aspx");
    for (int j = 0; j < getZoneDropdown().getOptions().size(); j++) {
        System.out.println(getZoneDropdown().getOptions().get(j).getText());

        getZoneDropdown().getOptions().get(j).click();
        // use implicit wait instead of an explicit one
        Thread.sleep(3000);
        WebElement stateDropDownElement = driver.findElement(By.xpath("//select[@id='ddlDealerState'] | //select[@name='ddlDealerState']"));

        Select stateDropDown = new Select(stateDropDownElement);
        List<WebElement> sdd = stateDropDown.getOptions();
        for (int k = 0; k < sdd.size(); k++) {
            System.out.println("        " + sdd.get(k).getText());
        }
    }
}

private Select getZoneDropdown() {
    return new Select(driver.findElement(By.xpath("//select[@id='ddlDealerZone'] | //select[@name='ddlDealerZone']")));
}

Поскольку у меня было несколько исключений StaleElementReferenceException с раскрывающимся списком зон, я решил получать новый экземпляр при каждом использовании.Для моего теста я использовал явное ожидание 3 секунды.Посмотрите на неявные ожидания и используйте их вместо этого, чтобы повысить производительность.Скажите, работал ли этот код и для вас?

И, конечно, вывод моей консоли:

North
        Chandigarh
        Delhi
        Haryana
        Himachal Pradesh
        Jammu and Kashmir
        Punjab
        Rajasthan
        Uttar Pradesh
        Uttrakhand
East
        Arunachal Pradesh
        Assam
        Bihar
        Manipur
        Meghalaya
        Mizoram
        Nagaland
        Orissa
        Sikkim
        Tripura
        West Bengal
        Jharkhand
        Bhutan
West
        Dadra and  Nagar
        Daman and Diu
        Goa
        Gujarat
        Madhya Pradesh
        Maharashtra
        Chhattisgarh
South
        Andhra Pradesh
        Karnataka
        Kerala
        Pondicherry
        Tamil Nadu
        Telangana
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...