Щелчок по элементу RSelenium возвращает NULL

Я хочу иметь возможность автоматически заполнять следующий тест. После каждой фразы вы можете выбрать Eens (согласен) или Oneens (не согласен). Я использую RSelenium для этого.

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

 choice_xpath <- "//*[contains(.,'Eens')]"

 choice <- driver$findElement(using = "xpath",
                              choice_xpath)

 choice$clickElement()

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

Я думаю, что это html, необходимый для понимания проблемы:

<script type="text/template" id="statements-tpl"></script> 
<script type="text/template" id="statement-tpl"> 
<span class="prev-button"><span>&lt;</span></span> 
<div class="copy"> 
<div class="copy-inner">{{ copy }}</div> </div> 
<div class="button-wrap"> 
<div class="button-container"> 
<div class="button button-1">
</div> 
</div> 

<div class="button-container"> 
<div class="button button-0"></div> 
</div> 

<div class="button-container no-opinion"> 
<div class="button button-2"></div> 
</div> 
</div> 

<span class="next-button"><span>&gt;</span></span>
</script> 

<script type="text/template" id="button-tpl"> 
<div class="button-inner-wrapper"> 
<div class="button-inner{{ selected ? ' selected' : '' }}"> 
<div class="prefix">Jouw antwoord:</div> 
<div class="copy"> {{% if ( type == 2 ) { %}} Geen mening {{% } else if ( type == 0 ) { %}} Oneens {{% } else { %}} Eens {{% } %}} </div> 
<div class="error-tooltip"></div> 
</div> 
</div>
</script> 

person 1053Inator    schedule 12.10.2016    source источник
comment
Не могли бы вы также поделиться соответствующим HTML?   -  person Saurabh Gaur    schedule 12.10.2016
comment
Соответствующий HTML-код - это ссылка в моем исходном сообщении, извините, если это было неясно. Итак, исходный код этой ссылки (educatievestemtest.be/regionaal/#stelling/1).   -  person 1053Inator    schedule 12.10.2016
comment
На этот раз я не могу просмотреть исходный код страницы, поэтому я говорю: поделитесь здесь соответствующим HTML-кодом, если вам действительно нужно быстрое решение. Спасибо   -  person Saurabh Gaur    schedule 12.10.2016
comment
Я добавил HTML-код, который, по моему мнению, наиболее актуален для вас.   -  person 1053Inator    schedule 12.10.2016
comment
Но я не вижу текст Eens (I agree) or Oneens (I don't agree), который вы хотите найти в своем xpath?? Дайте мне знать, какой элемент вы хотите найти в этом предоставленном HTML ??   -  person Saurabh Gaur    schedule 12.10.2016
comment
Я обновил html. Извините, если моего предыдущего ответа было недостаточно, я не совсем знаком с javascript, поэтому я не совсем уверен, что предоставить в виде html.   -  person 1053Inator    schedule 12.10.2016


Ответы (1)


Попробуйте использовать локатор ниже, чтобы найти соответствующий элемент: -

  • Чтобы найти кнопку EENS(Agree), попробуйте:

    eens <- driver$findElement(using = "css selector", "div.button.button-1")
    eens$clickElement()
    
  • Чтобы найти кнопку ONEENS(DisAgree), попробуйте:

    oneens <- driver$findElement(using = "css selector", "div.button.button-2")
    oneens$clickElement()
    
  • Чтобы найти кнопку GEEN MENING(No Opinion), попробуйте:

    geenmeening <- driver$findElement(using = "css selector", "div.button.button-0")
    geenmeening$clickElement()
    
person Saurabh Gaur    schedule 12.10.2016
comment
Если я делаю это для первой страницы, все работает нормально. Однако, когда я снова выполняю тот же код для страницы, сгенерированной после первого выполнения, я получаю следующую ошибку: Не удалось выполнить команду элемента, поскольку элемент не виден на странице. - person 1053Inator; 12.10.2016
comment
Тогда, вероятно, вам следует реализовать некоторое ожидание, пока элемент не станет видимым, и разрешить щелчок. Спасибо - person Saurabh Gaur; 12.10.2016
comment
@1053Inator Используйте sys.sleep(10) для ожидания жесткого кода или используйте driver$setImplicitWaitTimeout(1000) для неявного ожидания видимого элемента и разрешения щелчка. - person Saurabh Gaur; 12.10.2016
comment
Спасибо за ваш ответ и ваше терпение. Я пробовал оба подхода (явное и неявное ожидание), но проблема остается для меня. - person 1053Inator; 12.10.2016
comment
@ 1053Inator Возможно, на второй странице локатор HTML изменяется, и исходный элемент, который вы уже нашли, становится скрытым, поэтому вы не можете найти, вам нужно проверить на следующей странице HTML, чтобы нужный элемент остался прежним или нет. Спасибо - person Saurabh Gaur; 12.10.2016
comment
Сначала я попробовал с eens (div.button.button-1). Я думаю, проблема в том, что селектор css теперь может найти 2 элемента: div.button.button-1. Первый соответствует первой странице, которая теперь скрыта, а второй соответствует второй странице. Есть ли элегантный способ обойти эту проблему? Могу ли я указать селектору css выбирать только видимые элементы (кстати, я думал, что это поведение Selenium по умолчанию, или я что-то путаю?) - person 1053Inator; 12.10.2016