【问题标题】:How to check if some text is present on a web page using selenium 2?如何使用 selenium 2 检查网页上是否存在某些文本?
【发布时间】:2021-05-03 03:20:18
【问题描述】:

您好,我正在使用 selenium 对网页进行自动化测试。 我正在使用 selenium 2 和 python,并且只想在这个框架中得到答案。 那么如何检查是否存在某些文本?我试过资产equals但它不起作用?

assertEquals(driver.getPageSource().contains("email"), true);

【问题讨论】:

  • 上下文在这里是一件很棒的事情 - 你是什么意思它不起作用?它怎么不起作用?它有什么作用?在您尝试获取的元素周围发布您的 HTML 副本。为什么要扫描整个页面源?您可能需要回到 Selenium 教程的绘图板上。

标签: python automated-tests selenium-webdriver


【解决方案1】:

对于那些仍然感兴趣的人:

通用解决方案

if text in driver.page_source:
    # text exists in page

单元测试

assertTrue(text in driver.page_source)

pytest

assert text in driver.page_source

【讨论】:

  • 小修正:pytest 可以(应该)甚至像assert text in driver.page_source 一样简单
  • 感谢您的反馈。我修改了答案。
  • 这是否意味着文本是“可见的”或者只是它存在于源中的某个位置,但可能被 css 或下拉列表等隐藏?
  • @Jeppe 这意味着它只是在 HTML 源代码中 - 所以是的,它可以通过 CSS 隐藏。应该考虑这个问题,并且应该逐页测试解决方案。
  • @ChickenFeet 谢谢。 “Boon kwee”的回答依赖于 WebDriverWait 来等待元素可点击 - 所以它必须完全可见。其他可用的等待条件:selenium-python.readthedocs.io/waits.html
【解决方案2】:

您可以使用driver.page_source 和一个简单的正则表达式来检查文本是否存在:

import re    
src = driver.page_source
text_found = re.search(r'text_to_search', src)
self.assertNotEqual(text_found, None)

【讨论】:

    【解决方案3】:

    你可以试试

    browser = webdriver.Firefox()
    browser.get(url)
    WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'some link text')))
    

    基本上上面几行启动 Firefox,导航到指定的 url,使浏览器保持 10 秒,加载一些 url 然后查找特定的链接文本,如果没有找到链接文本,则触发 TimeoutException。

    请注意使用的括号数量,如果括号数量与上述不对应,则会出现错误。

    为了能够运行上述语句,必须声明以下内容

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    

    这使用“element_to_be_clickable” - 可以在此处找到等待条件的完整列表:Selenium Python: Waits

    【讨论】:

      猜你喜欢
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多