【问题标题】:How to access the <li> items using Selenium webdriver如何使用 Selenium webdriver 访问 <li> 项目
【发布时间】:2019-10-13 18:30:57
【问题描述】:

我想访问网页中的&lt;li&gt; 项目。

如何从给定的 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>

【问题讨论】:

  • 在您的帖子中发布您的代码
  • @Thomas 您使用哪种语言 Java / Python / C# / JavaScript?
  • if(driver!=null) { System.out.println("Driver is not null"); List add= driver.findElements(By.xpath("//li/span[text()='Add']")); for(WebElement element:add) { System.out.println("for loop"); System.out.println(element.getText()); } driver.findElement(By.xpath("//*[@id=\"add\"]/li[1]/span")).click();线程.sleep(1000);请注意,我无法使用上述代码进入循环。此外,“添加”链接出现时带有 + 符号,当我们单击 + 符号时选项可见。尽管如此,我还是无法点击“添加”

标签: javascript selenium-webdriver xpath css-selectors xpath-1.0


【解决方案1】:

要匹配单个项目,您可以使用以下 XPath 定位器:

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

要匹配所有项目并获取其文本,相关的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)

【讨论】:

    【解决方案2】:

    要打印 UserMakeModel 等列表项,您可以使用以下解决方案:

    • 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
        

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-31
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      相关资源
      最近更新 更多