Моя конечная цель - нажать "Да" или "Нет" на веб-странице.
С помощью пожарной ошибки я вижу, что кнопки "Да" и "Нет" находятся в классе "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 результат и беспокоиться о том, изменится ли индекс, можно ли каким-то образом найти результаты по тексту?
Лучший способ - идентифицировать этот элемент с помощью 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
Случай 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();
То же самое относится к кнопке " Нет". Вам просто нужно заменить Да " Нет".
Есть несколько вариантов поиска кнопок, но я думаю, что класс answer-toggle
звучит хорошо, на что можно положиться:
var buttons = Driver.Instance.FindElements(By.CssSelector("div.answer-toggle button.btn"));