#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 для нужного элемента, остается неизменным или нет. Спасибо