Selenium / Chrome - выбор входного флажка без идентификатора - PullRequest
0 голосов
/ 28 ноября 2018

Спасибо за помощь заранее.Новичок в Selenium / Chrome, и у меня был хороший опыт, пока я не выбрал конкретный сценарий.

У меня есть модал, содержащий 5 полей (3 раскрывающихся списка и UL с 2 LI)

Каждый LI содержит метку и флажок ввода.

Все раскрывающиеся списки имеют идентификатор, поэтому им было легко манипулировать с помощью FindElement(By.Id("ID")).SelectText("TEXT");

Однако у Ли внутри Ула их нет, и я получал исключения NoSuchElementException с каждой попыткойнайдите их.

<ul id="CertificatesToAdd" name="CertificatesToAdd" class="nav nav-list 
    checkbox-list add-certificate-required" data-trigger="manual" data- placement="top">
  <li>
    <label class="checkbox" style="font-weight:normal !important;">
    <input type="checkbox" class="add-certificate-checkbox" 
    value="171">
    Certificate of Registration
    </label>
  </li>
  <li>
    <label class="checkbox" style="font-weight:normal !important;">
    <input type="checkbox" class="add-certificate-checkbox" 
    value="172">
    Collection Agency License
    </label>
  </li>
</ul>

Я испробовал обе строки FindElement под todo и обе вернули OpenQA.Selenium.NoSuchElementException: Unable to locate element

new SelectElement(BaseTest.Driver.FindElement(By.Id("AddCertificateCountry")))
  .SelectByText("Canada");
new SelectElement(BaseTest.Driver.FindElement(By.Id("AddCertificateState")))
  .SelectByText("Alberta");

//TODO: correct input value for checkbox
new SelectElement(BaseTest.Driver.FindElement(By.CssSelector(
  "#CertificateToAdd>li:nth-child(2)"))).SelectByValue("172");

new SelectElement(BaseTest.Driver.FindElement(By.XPath(
  "//*[@id="CertificatesToAdd"]/li[2]/label/input"))).SelectByValue("172");

Любые идеи будут полезны и оценены.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Чтобы установить флажок , связанный с тегами <label>, вы можете использовать следующие решения:

  • Свидетельство о регистрации :

    BaseTest.Driver.FindElement(By.XPath("//label[@class='checkbox'][normalize-space()='Certificate of Registration']/input[@class='add-certificate-checkbox']")).Click();
    
  • Лицензия агентства по сбору платежей :

    BaseTest.Driver.FindElement(By.XPath("//label[@class='checkbox'][normalize-space()='Collection Agency License']/input[@class='add-certificate-checkbox']")).Click();
    
0 голосов
/ 29 ноября 2018

Здесь вы нацелены на li:

new SelectElement(BaseTest.Driver.FindElement(By.CssSelector(
  "#CertificateToAdd>li:nth-child(2)"))).SelectByValue("172");

Здесь ваш xpath означает, что вход является дочерним элементом метки, а не брата:

new SelectElement(BaseTest.Driver.FindElement(By.XPath(
  "//*[@id="CertificatesToAdd"]/li[2]/label/input"))).SelectByValue("172");

Я думаю, вы можетенаверное, разберись там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...