Поиск кнопки в классе группы кнопок с помощью Selenium Webdriver в C #

1

Моя конечная цель - нажать "Да" или "Нет" на веб-странице.

С помощью пожарной ошибки я вижу, что кнопки "Да" и "Нет" находятся в классе "btn-group",

<div class="btn-group btn-group-default answer-toggle" aria-label="..." role="group">
     <button class="btn ng-pristine ng-valid active btn-secondary ng-touched" btn-radio="true" ng-model="consultation.previousSoundVoid" ng-class="{'btn-secondary': consultation.previousSoundVoid}" type="button">
          Yes
     </button>
     <button class="btn ng-pristine ng-untouched ng-valid" btn-radio="false" ng-model="consultation.previousSoundVoid" ng-class="{'btn-secondary': consultation.previousSoundVoid == false}" type="button">
          No
     </button>
</div>

Я думаю, что могу найти Element by XPath, но я пытаюсь улучшить свое мастерство в Selenium.

Я надеюсь, что есть способ сначала найти класс "btn-group", а затем выбрать "Да" или "Нет" в этом.

Или сможете создавать переменные для параметров "Да" и "Нет". Если я сделаю:

var button = Driver.Instance.FindElements(By.ClassName("btn"));

Он возвращает 21 вариант. Я нашел это:

button[15].Text     returns "Yes"
button[16].Text     returns "No"

Вместо того, чтобы просматривать все 21 результат и беспокоиться о том, изменится ли индекс, можно ли каким-то образом найти результаты по тексту?

Теги:
selenium
selenium-webdriver
webdriver

3 ответа

5
Лучший ответ

Лучший способ - идентифицировать этот элемент с помощью text и xpath поскольку у них нет уникального идентификатора

//button[.='Yes']

Отчаянно использовать cssSelector?

.btn.ng-pristine.ng-valid.active.btn-secondary.ng-touched

так как это сложный класс

Вы также можете перейти на nth-child() с помощью css

[role='group']>button:nth-child(1)

тогда как 2 позволит вам выбрать кнопку с текстом No

3

Случай 1: когда answer-toggle уникален на странице HTML

Driver.Instance.FindElements(By.XPath("//div[contains(@class,'answer-toggle')]//button[contains(text(),'Yes')]")).Click();

Это сначала обнаружит div, у которого есть ответ на вызов в его имени класса, и найдите кнопку с текстом Да

Случай 2: answer-toggle не уникален на вашей HTML-странице, вы можете использовать полное имя класса следующим образом

Driver.Instance.FindElements(By.XPath("//div[@class='btn-group btn-group-default answer-toggle']//button[contains(text(),'Yes')]")).Click();

или

Driver.Instance.FindElements(By.XPath("//div[@class,'btn-group btn-group-default answer-toggle']//button[contains(text(),'Yes')]")).Click();

Случай 3: Если на вашей HTML-странице есть только одна кнопка с текстом "Да",

Driver.Instance.FindElements(By.XPath("//button[contains(text(),'Yes')]")).Click();

То же самое относится к кнопке " Нет". Вам просто нужно заменить Да " Нет".

2

Есть несколько вариантов поиска кнопок, но я думаю, что класс answer-toggle звучит хорошо, на что можно положиться:

var buttons = Driver.Instance.FindElements(By.CssSelector("div.answer-toggle button.btn"));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню