【问题标题】:How to get a list of the <li> elements in an <ul> with Selenium using Python?如何使用 Python 使用 Selenium 获取 <ul> 中的 <li> 元素列表?
【发布时间】:2015-04-09 12:04:16
【问题描述】:

我正在使用 Selenium WebDriver 和 Python 进行 UI 测试,我想检查以下 HTML:

<ul id="myId">
    <li>Something here</li>
    <li>And here</li>
    <li>Even more here</li>
</ul>

我想从这个无序列表中循环遍历元素并检查其中的文本。我通过 id 选择了 ul 元素,但我找不到任何方法来循环 Selenium 中的 &lt;li&gt;-children。

有人知道如何使用 Selenium(在 Python 中)遍历无序列表的 &lt;li&gt;-childeren 吗?

【问题讨论】:

  • 请提供html或至少一个样本
  • HTML 由于缺少缩进而被掩埋。

标签: python html selenium selenium-webdriver gui-testing


【解决方案1】:

您可以使用列表推导:

# Get text from all elements
text_contents = [el.text for el in driver.find_elements_by_xpath("//ul[@id='myId']/li")]
# Print text
for text in text_contents:
    print(text)

【讨论】:

    【解决方案2】:

    奇怪的是,我不得不使用这个 get_attribute()-workaround 来查看内容:

    html_list = driver.find_element_by_id("myId")
    items = html_list.find_elements_by_tag_name("li")
    for item in items:
        print(item.get_attribute("innerHTML"))
    

    【讨论】:

      【解决方案3】:

      您需要使用.find_elements_by_ 方法。

      例如,

      html_list = self.driver.find_element_by_id("myId")
      items = html_list.find_elements_by_tag_name("li")
      for item in items:
          text = item.text
          print text
      

      【讨论】:

      • 通过有一个名为list 的变量,你正在隐藏一个内置的list,这可能会导致非常奇怪的问题。
      • 马克,谢谢!这似乎工作得很好。最后一个问题;标签内实际上有一个链接:&lt;li&gt;&lt;a href="#"&gt;some link&lt;/a&gt;&lt;/li&gt;,我希望print item.text 打印该链接,但它不打印任何内容。您是否知道我将如何获取链接的 html,或者选择链接并打印出链接的文本?提前致谢!
      • @alecxe 我完全同意,但没有人应该只是复制粘贴。 :) 但我已经编辑了变量以防万一。
      猜你喜欢
      • 2016-01-05
      • 1970-01-01
      • 2015-12-06
      • 2019-08-03
      • 1970-01-01
      • 2022-12-05
      • 2021-04-02
      • 2022-01-18
      • 2011-08-26
      相关资源
      最近更新 更多