Как получить доступ к элементам <li>с помощью веб-драйвера Selenium - PullRequest
0 голосов
/ 28 мая 2019

Я хочу получить доступ к <li> элементам на веб-странице.

Как получить доступ к таким элементам списка, как «Пользователь», «Марка и модель», из данного HTML-кода?

Я не могу получить содержимое списка. Мой код не выполняет коды, добавленные внутри цикла for.

HTML:

<li class="nav-item"> <span class="nav-link add-items" data-toggle="collapse" data-target="#add"> <i class="fas fa-plus"></i> &nbsp; Add</span>
  <ul class="add-menu collapse" id="add">
    <li><span data-toggle="modal" data-target="#add-user-modal">User</span></li>
    <li><span data-toggle="modal" data-target="#add-make-modal">Make</span></li>
    <li><span data-toggle="modal" data-target="#add-model-modal">Model</span></li>
  </ul>
</li>

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Для печати элементов списка, таких как Пользователь , Марка & Модель , вы можете использовать следующее решение:

  • Java :

    • Использование cssSelector:

      List<String> myItems = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("li.nav-item ul.add-menu.collapse li>span"))).stream().map(element->element.getAttribute("innerHTML")).collect(Collectors.toList());
      System.out.println(myItems);
      
    • Использование xpath:

      List<String> myItems = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//li[@class='nav-item']//ul[@class='add-menu collapse']//li/span"))).stream().map(element->element.getAttribute("innerHTML")).collect(Collectors.toList());
      System.out.println(myItems);
      
  • Python :

    • Использование CSS_SELECTOR:

      print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "li.nav-item ul.add-menu.collapse li>span")))])
      
    • Использование XPATH:

      print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//li[@class='nav-item']//ul[@class='add-menu collapse']//li/span")))])
      
    • Примечание : необходимо добавить следующие операции импорта:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
0 голосов
/ 28 мая 2019

Для соответствия одному элементу вы можете использовать следующий XPath locator:

//li/span[text()='User']

enter image description here

Для соответствия всем элементами получите их текст, соответствующий XPath Expression будет:

//ul[@class='add-menu collapse']/li/span

Пример Python код:

for li in driver.find_elements_by_xpath("//ul[@class='add-menu collapse']/li/span"):
    print(li.text)
...