Элемент щелчка RSelenium возвращает значение NULL

#r #selenium #xpath #selenium-webdriver #rselenium

#r #selenium #xpath #selenium-webdriver #rselenium

Вопрос:

Я хотел бы иметь возможность автоматически заполнять следующий тест. После каждой фразы вы можете выбрать либо 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>amp;<</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>amp;></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> 
  

Комментарии:

1. Не могли бы вы также поделиться соответствующим HTML-кодом??

2. Соответствующий HTML-код — это ссылка в моем исходном сообщении, извините, если это было непонятно. Итак, исходный код этой ссылки ( educatievestemtest.be/regionaal/#stelling/1 ).

3. На этот раз я не могу просмотреть исходный код страницы, поэтому я говорю, поделитесь соответствующим HTML здесь, если вам действительно нужно быстрое решение. Спасибо

4. Я добавил HTML, который, по моему мнению, наиболее подходит для вас.

5. Но я не вижу текст Eens (I agree) or Oneens (I don't agree) , который вы хотите найти в вашем xpath?? Дайте мне знать, какой элемент вы хотите найти в этом предоставленном HTML??

Ответ №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()
      

Комментарии:

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

2. Тогда, вероятно, вам следует реализовать некоторое ожидание, пока элемент не станет видимым, и включить щелчок. Спасибо

3. @1053Inator Используется sys.sleep(10) для ожидания жесткого кода или driver$setImplicitWaitTimeout(1000) для неявного ожидания появления элемента и включения щелчка..

4. Спасибо за ваш ответ и ваше терпение. Я пробовал оба подхода (явное и неявное ожидание), но проблема остается для меня.

5. @1053Inator Возможно, на второй странице изменяется HTML-локатор, и исходный элемент, который вы уже нашли, становится скрытым, поэтому вы не можете найти, вам нужно проверить на следующей странице HTML для нужного элемента, остается неизменным или нет. Спасибо