【问题标题】:How to get the length of the <li> elements in an <ol> with Selenium in Python?如何在 Python 中使用 Selenium 获取 <ol> 中 <li> 元素的长度?
【发布时间】:2017-10-31 22:55:09
【问题描述】:

我的 HTML 中有一个 &lt;ol&gt; 列表,如下所示:

<ol id="search-results">
  <li class="foo">-</li>
  <li class="foo">-</li>
  <li class="foo">-</li>
  <li class="foo">-</li>
</ol>

我需要做的是验证&lt;ol&gt; 列表中是否包含&lt;li&gt; 项目,即。搜索查询会得出实际结果。我目前的代码如下:

search_field = driver.find_element(By.NAME, 'query')
search_field.send_keys('Foo')
search_field.submit()

results_list = driver.find_element(By.ID, 'search-results')
assert len(results_list) > 0

但是当我运行它时我得到了TypeError: object of type 'FirefoxWebElement' has no len() 错误。

有什么办法可以克服吗?

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    你的

    driver.find_element(By.ID, 'search-results')
    

    不要返回一个列表而是一个元素。如果您想要包含所有 li 的列表,可以使用 find_elements_by_xpath

    尝试:

    results_list = driver.find_elements_by_xpath("//ol[@id='search-results']/li[@class='foo']")
    print(len(results_list))
    assert len(results_list) > 0
    

    【讨论】:

    • @Fashinated 乐于助人!如果此答案或任何其他答案解决了您的问题,请将其标记为已接受:stackoverflow.com/help/someone-answers
    【解决方案2】:

    尝试以下方法:

    search_field = driver.find_element(By.NAME, 'query')
    search_field.send_keys('Foo')
    search_field.submit()
    
    results_list = driver.find_elements(By.CSS_SELECTOR, '#search-results > li')
    assert len(results_list) > 0
    

    【讨论】:

    • 这不会仍然只选择ol 元素吗?这应该是By.CSS_SELECTOR, '#search-results &gt; li'
    • 这个也可以,谢谢!现在我只需要决定哪种方法效果最好。
    • 感谢您的评论!
    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2016-01-05
    • 2021-09-09
    • 2022-01-11
    • 2015-12-06
    • 2018-06-16
    • 2020-08-18
    相关资源
    最近更新 更多