Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Автоматизация раскрывающегося списка Bootstrap с использованием Selenium java

Автор вопроса: samuel durairajОтветов: 2

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

<ul style="max-height:48px;margin:0px 0px 0px 0px;" aria-expanded="false" aria-activedescendant="item1520752761987-1" aria-label="Select your size" title="Select your size" role="listbox" tabindex="0">
    <li id="item1520752761987-1" class="selected" role="option" style="width: 52px;">
    --
    <span class="checked" aria-hidden="true"> ✓</span>
    </li>
    <li id="item1520752761987-2" role="option" data-value="248" style="width: 52px;">7</li>
    <li id="item1520752761987-3" role="option" data-value="304" style="width: 52px;">8</li>
    <li id="item1520752761987-4" role="option" data-value="306" style="width: 52px;">9</li>
    <li id="item1520752761987-5" role="option" data-value="278" style="width: 52px;">10</li>
    <li id="item1520752761987-6" role="option" data-value="280" style="width: 52px;">11</li>
    <li id="item1520752761987-7" role="option" data-value="282" style="width: 52px;">12</li>
    <li id="item1520752761987-8" role="option" data-value="284" style="width: 52px;">13</li>
    <li id="item1520752761987-9" role="option" data-value="285" style="width: 52px;">14</li>
    <li id="item1520752761987-10" role="option" data-value="286" style="width: 52px;">15</li>
    </ul>

Невозможно выбрать значения из раскрывающегося списка. Ниже приведен код Java Selenium, который я использовал.

List<WebElement> dd_menu=driver.findElements(By.xpath("//ul[@title='Select your size']//li"));
    for(int i=0;i<dd_menu.size();i++)
    {
        WebElement element=dd_menu.get(i);
        String val=element.getAttribute("innerHTML");
        if(val.contentEquals("11"))
        {
            element.click();
        }
        //System.out.println("Values From Dropdown : "+val);
    }

    driver.findElement(By.xpath(".//*[@id='product-addtocart-button']")).click();
}

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

Получение сообщения об ошибке в eclipse, приведенном ниже:

org.openqa.selenium.NoSuchElementException: невозможно найти элемент: {"method": "xpath", "selector": "// span [@ class = 'checked'] // parent :: li [@ id = 'item1520579060429 -1 '] "} Длительность или тайм-аут команды: 48 миллисекунд. Для получения документации по этой ошибке посетите: http://seleniumhq.org/exceptions/no_such_element.html Информация о сборке: версия: '2.45.0', ревизия: '32a636c', время: '2015-03-05 22:01:35' Информация о системе: хост : 'VG-IT-LAP-104', ip: '192.168.1.100', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.7 .0_79 '*** Информация об элементе: {Using = xpath, value = // span [@ class =' ​​checked '] // parent :: li [@ id =' item1520579060429-1 ']} Идентификатор сеанса: 2ca11707-7e86 -4811-a76b-b7461d3dfb92 Информация о драйвере: org.openqa.selenium.firefox.FirefoxDriver Возможности [{platform = WINDOWS, acceptSslCerts = true, javascriptEnabled = true, cssSelectorsEnabled = true, databaseEnabled = true, browser e, nativeEvents = true, webStorageEnabled = true, rotatable = false, locationContextEnabled = true, applicationCacheEnabled = true, takeScreenshot = true, version = 33.0.3}]

Пробовал разные комбинации динамических xpath, приведенных ниже, но все равно не сработало:

//li[contains(@id,'item1520491614103-8')]//following::span[@class='checked']
//li[contains(.,'13')]
//span[@class='checked']//parent::li[@id='item1520579060429-1']

Не могли бы вы указать мне, где что-то пошло не так ... если мой xpath неверен, чтобы выбрать любое значение из раскрывающегося списка ... пожалуйста, сообщите правильный xpath

  • Уточните, пожалуйста, Этот код не работал. В чем конкретно проблема? Guy 11.03.2018
  • Также добавьте трассировку стека ошибок. Этот код не работал - это очень расплывчатое и абстрактное утверждение. Manmohan_singh 11.03.2018
  • Теперь я включил ошибку, с которой столкнулся прямо сейчас, а также динамические пути xpath, которые я использовал до сих пор. samuel durairaj 11.03.2018
  • Я думаю, что Xpath в вашем коде лучше, чем альтернативы, которые вы даете. Чтобы узнать, есть ли проблема с синхронизацией, добавьте Thread.Sleep (5000) перед первым оператором в блоке кода выше. Если время действительно является проблемой, замените спящий режим явным ожиданием в вашем окончательном коде. Frank 11.03.2018
  • Привет, Фрэнк, спасибо за предложение, попробовал, но все равно получаю ту же ошибку samuel durairaj 12.03.2018

dropdownseleniumautomation

Ответы

Ответ 1 · рейтинг 1 · DebanjanB

В соответствии с вашим кодом вы использовали следующую стратегию локатора:

driver.findElements(By.xpath("//ul[@title='Select your size']//li"));

Но вы видите ошибку:

org.openqa.selenium.NoSuchElementException: Unable to locate element

Я не вижу ошибок как таковых в вашем блоке кода, однако ваша основная проблема - это совместимость версий между используемыми вами двоичными файлами:

  • У вас Selenium Client версия 2.45.0 от 2015-03-05 22:01:35, что составляет 3 года em. > старше.
  • У вас версия JDK 1.7.0_79, которая является древней.

Таким образом, между текущей версией JDK (8u162) и текущей версией Selenium Client (v10.0.0 em>)

Решение

  • Обновите ChromeDriver до Уровень JDK 8u162.
  • Обновите Selenium Client до 10.0.0 уровень.
  • Очистите свою рабочую область проекта и перестройте проект только с использованием необходимых зависимостей.
  • Используйте инструмент CCleaner, чтобы избавиться от всей рутинной работы ОС до и после выполнения. вашего Test Suite.
  • Если ваша базовая версия веб-браузера слишком старая, удалите ее с помощью Revo Uninstaller и установите последнюю версию GA и выпущенную версию веб-браузера.
  • Выполните свой @Test.

Ответ 2 · рейтинг 1 · Bill Hileman

Измените строку:

for(int i=0;i<dd_menu.size();i++)

to

for(int i=1;i<dd_menu.size();i++)

На основании вашего сообщения об ошибке он пытается получить доступ к первому элементу списка, который на самом деле является скрытой записью (галочка). Начав цикл с нуля вместо единицы, вы включаете этот элемент списка. Если остальная часть вашего кода верна, пропуск этого элемента должен сработать или, по крайней мере, привести к другой ошибке.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы