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

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

<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


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


Ответы (2)


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

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 года старше.
  • У вас версия JDK 1.7.0_79, которая является древней.

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

Решение

  • Обновите ChromeDriver до Уровень JDK 8u162.
  • Обновите Selenium Client до 10.0.0 уровень.
  • Очистите свою рабочую область проекта и перестройте проект только с использованием необходимых зависимостей.
  • Используйте инструмент CCleaner, чтобы избавиться от всей рутинной работы ОС до и после выполнения. вашего Test Suite.
  • Если ваша базовая версия веб-браузера слишком старая, удалите ее с помощью Revo Uninstaller и установите последнюю версию GA и выпущенную версию веб-браузера.
  • Выполните свой @Test.
person DebanjanB    schedule 11.03.2018
comment
Привет, спасибо за ваше предложение, я следил за вашим комментарием, обновил версию Selenium и версию java, но все еще сталкиваюсь с той же проблемой. См. Журнал ошибок, приведенный ниже - person samuel durairaj; 13.03.2018
comment
org.openqa.selenium.NoSuchElementException: нет такого элемента: невозможно найти элемент: {метод: xpath, селектор: .//* [@ id = 'item1520927444953-1']} (Информация о сеансе: chrome = 65.0.3325.146) ( Информация о драйвере: chromedriver = 2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91), platform = Windows Информация о сборке: версия: '3.10.0', ревизия: '176b4a9', время: '2018-03-02T19: 10: 56.039Z' Информация о системе: хост : 'VG-IT-LAP-104', ip: '172.20.23.27', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10 .0 ', java.version:' 1.8 .0_161 ' - person samuel durairaj; 13.03.2018

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

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

to

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

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

person Bill Hileman    schedule 12.03.2018
comment
Привет .. Спасибо за ваше предложение, я изменил код в соответствии с вашим комментарием, но все еще сталкиваюсь с той же проблемой. любые другие предложения, пожалуйста - person samuel durairaj; 13.03.2018
comment
Вы уверены, что сообщение об ошибке не изменилось? Потому что это конкретно относилось к первому (0) элементу оригинала. Это все еще относится к тому же элементу? - person Bill Hileman; 13.03.2018
comment
Да, сообщение об ошибке не изменилось, то же самое исключение, что такой элемент не найден, появилось в сообщении об ошибке. - person samuel durairaj; 13.03.2018
comment
‹Li id = item1520927444953-1 class = selected role = option style = width: 52px;› - ‹span class = checked aria-hidden = true› ✓ ‹/span› ‹/li› это элемент, который я пытаюсь использовать щелкнуть - person samuel durairaj; 13.03.2018
comment
Это как-то связано с 'aria-hidden' = true в теге ‹span›? - person samuel durairaj; 13.03.2018