Подскажите пожалуйста, как правильно использовать select в Selenium (желательно, но не обязательно) на Ruby.
Пример:
сайт: Screenshot by Lightshot - список скрыт Screenshot by Lightshot - кликнул по списку и он открыт(я сам, селениум не кликает)
код селекта:
`
Aktualität
status
name
Verkäufe
`
мой код:
`element = @driver.find_element xpath: ".//*[@id='list_order']"
select = Selenium::WebDriver::Support::Select.new(element)
select.select_by(:value, 'name')
`
так же пробовал select_by(:text, "status")
пробовал кликать по element перед созданием select
так же пробовал вариант: element = @driver.find_element xpath: ".//*[@id='list_order']" all_options = element.find_elements(:tag_name, "option") all_options.each do |option| puts "Value is: " + option.attribute("value") option.click if option.attribute("value") == "status" end
Вывод: Value is: campaign_id Value is: status Value is: name Value is: ordered_qty_sum
Т.е. он видит value, но не кликает по option
Не могу понять, что делаю не так
@MaximZaitsev, проблема в том, что вебдрайвер не кликает по списку. Т.е. как пользователь я могу кликнуть, но вебдрайвер этого не делает.
element = @driver.find_element xpath: ".//*[@id='list_order']"
expect(element.nil?).to eq false # проверка, что элемент найден
element.click # после клика список должен раскрыться, но он не раскрывается.
@LeoRush, я пока не понял, как работать с Capybara. Только сегодня с ней знакомился, пока не нашел понятного материала для чайников. В основном туториалы на уровне “вы и так все это знаете, нафига я записываю ролик, сам не знаю…” @LeoRush, если знаете книгу/туториал/статью подскажите пожалуйста.
Как понять, какой элемент кликается? Список даже не раскрывается.
С этими кликами вообще беда. Кликнуться может, что угодно. Для начала я бы проверил, что находится именно этот элемент. Проверьте в firepath. Точно ли один такой элемент на странице?
Руби знаю хреновато, поэтому попытаюсь помочь на основе Java и общей эрудиции
Давайте попробуем убедиться, что наш select вообще 1 на странице. Для этого выведем System.out.println(driver.findElements(By.xpath(".//*[@id=‘list_order’]")))
Ожидаемый вывод: 1. Если получили больше - значит, элементов по данному xpath более 1. Какой из них подхватит вебдрайвер - будет загадкой. Если 0 - значит, наш xpath вообще неверен. Решение: написать такой xpath, по которому данный элемент будет 1.
В Вашем тексте я вижу “status”, но на скриншоте вижу “Status”. Не исключаю, что капиталайзинг сделан с помощью CSS. Но также не исключаю перепечатки руками куска DOM и связанных с этим опечаток. Мой совет - проверьте такие моменты, как большие буквы, пробелы до или после названия и т.д. Вообще, во избежание такого типа ошибок, рекомендую написать ф-цию нормализации или воспользоваться готовой, если найдёте её реализацию в рубях. Задача функции: привести к ловеркейсу + убрать пробелы и табуляции сначала и в конце стринги, подставляемой в качестве параметра.
Попробуйте использовать selectByIndex вместо selectByValue. Просто для проверки, что Ваш селект вообще подхватывается корректно.
Ну и напоследок: Вы вряд ли увидите в тесте последовательность действий “селект раскрылся -> выбралось значение -> селект закрылся”. Скорее сменится выбранное в селекте значение. Проверьте - может, у Вас оно выбирается нормально, но Вы этого просто не замечаете?
Ну, это просто и действенно, если не получается по-другому, то вполне имеет право на жизнь)
P.S: вспоминаю автоматизацию под ИЕ7, когда половина кликов нативных не проходила, ИЕ не поддерживал нормальные локаторы и приходилось кликать джаваскриптом по длиннющим локаторам в таблично-сверстанном индусами приложении…