RSelenium: выберите вариант из раскрывающегося списка

Я использую RSelenium для заполнения веб-формы. Чтобы выбрать вариант из раскрывающегося списка, я использую следующее:

xpathoption <- paste0("//select[@id = '",samplepatient[p,'name'],"']/option[",samplepatient[p,'value'],"]")

optionelem <- remDrv$findElement(using = "xpath", xpathoption)
selectelem <- remDrv$findElement(using = "xpath"
                   , paste0("//select[@id = '",samplepatient[p,'name'],"']"))
optionelem$clickElement()
selectelem$screenshot(display = T)

Я использую следующее, чтобы проверить, был ли выбран правильный вариант:

remDrv$findElement(using = "xpath", paste0("//select[@id = '",samplepatient[p,'name'],"']"))$getElementAttribute("value")[[1]]

У меня проблема в том, что когда команда clickElement() запускается дважды, результат последней команды меняется. Я также проверил результат с помощью screenshot(). Это также показывает, что при двойном использовании команды clickElement() переключается на другую опцию.

Есть ли другой способ выбрать параметр из раскрывающегося списка, который не создает такого поведения?

Я использую докер на ubuntu с firefox 3.0.1.

Форма взята из калькулятора, который я хочу использовать. Чтобы открыть саму форму, вам нужно сначала проверить заявление об отказе от ответственности, например:

remDrv$navigate('http://riskcalculator.facs.org/RiskCalculator/')

remDrv$findElement(using = "xpath", "//input[@id = 'chkDisclaimer']")$clickElement()
Sys.sleep(1) 
remDrv$findElement(using = "xpath", "//input[@id = 'btnContinue']")$clickElement()
Sys.sleep(1)

воспроизводимый пример после отказа от ответственности:

#select age group
optionelem <- remDrv$findElement(using = "xpath", "//select[@id = 'AgeGroup']/option[3]")
selectelem <- remDrv$findElement(using = "xpath", "//select[@id = 'AgeGroup']")
#first attempt
optionelem$clickElement()
selectelem$getElementAttribute("value")
# result = 3
#second attempt
optionelem$clickElement()
selectelem$getElementAttribute("value")
# result = 1

person Wietze314    schedule 30.11.2016    source источник
comment
Можно ли указать веб-страницу, на которой вы заполняете форму?   -  person jdharrison    schedule 30.11.2016
comment
Я добавил информацию о веб-странице в вопрос   -  person Wietze314    schedule 30.11.2016
comment
Я изучил этот запуск самого последнего хрома и не вижу этой проблемы (то есть результат возвращается как 3 в обоих случаях). Вскоре я запущу образ Docker standalone-firefox-debug:3.0.1-barium и посмотрю, присутствует ли проблема.   -  person jdharrison    schedule 01.12.2016
comment
Я могу воспроизвести этот запуск docker run -d -p 5901:5900 -p 127.0.0.1:4444:4444 selenium/standalone-firefox-debug:3.0.1-barium . Вероятно, это проблема с geckodriver github.com/mozilla/geckodriver/issues/322.   -  person jdharrison    schedule 01.12.2016
comment
Так что я могу лучше переключиться на самую последнюю версию Chrome, чтобы запустить это?   -  person Wietze314    schedule 01.12.2016
comment
Запуск docker run -d -p 5901:5900 -p 127.0.0.1:4444:4444 selenium/standalone-chrome-debug:3.0.1-barium У меня не возникает этой проблемы. Если хром полезен для вас, возможно, используйте это изображение. В противном случае вы можете попробовать более старую версию образа Firefox, см. hub.docker. .com/r/selenium/standalone-firefox-debug/tags .   -  person jdharrison    schedule 01.12.2016


Ответы (2)


Как упоминалось в одном из комментариев, проблема связана не с RSelenium, а с используемым докером. Теперь я использую хром-докер (автономный хром), у которого нет такой же проблемы с выбором параметра в раскрывающемся списке.

person Wietze314    schedule 08.12.2016
comment
Просто отметим, что в предыдущей версии firefox эта проблема может отсутствовать, и, скорее всего, она будет исправлена ​​в будущей версии firefox. - person jdharrison; 08.12.2016

Я не сталкиваюсь с какими-либо проблемами при выборе параметров с использованием clickElement, например:

remDrv$navigate('http://riskcalculator.facs.org/RiskCalculator/')
remDrv$findElement("id", "chkDisclaimer")$clickElement()
Sys.sleep(1) 
remDrv$findElement("id", "btnContinue")$clickElement()
Sys.sleep(1)
#select age group
ageElems <- remDrv$findElements("css", "#AgeGroup option")
ageElems[[3]]$clickElement()
#select Diabetes
diaElems <- remDrv$findElements("css", "#Diabetes option")
diaElems[[2]]$clickElement()
# Select Gender
genderElems <- remDrv$findElements("css", "#Gender option")
genderElems[[1]]$clickElement()

При работе в Docker вы можете использовать «отладочное» изображение и средство просмотра VNC, чтобы точно увидеть, что происходит в браузере.

person jdharrison    schedule 30.11.2016
comment
Я отредактировал вопрос, чтобы дать вам воспроизводимый пример. Вы указываете, что это работает с первого раза. Проблема в том, что он не дает надежного результата при выборе параметра более одного раза (например, он переключается с варианта 3 на вариант 1 в AgeGroup и обратно. - person Wietze314; 01.12.2016