【问题标题】:Assert/VerifyElementPresent with Python and WebDriver?使用 Python 和 WebDriver 断言/验证ElementPresent?
【发布时间】:2012-02-09 17:19:46
【问题描述】:

我可能只是对从 Selenium 到 WebDriver 的更改及其各自的文档感到困惑。在文档中有关测试设计的部分中,谈到了使用 Assert vs Verify,例如 AssertElementPresent。然而,在浏览 WebDriver 教程并开始设置测试时,这似乎不适用于 Python。我是否忽略了文档中的某些内容,这是否不适用于 WebDriver,不适用于使用 python,我是否应该使用 python 的功能而不是来自 selenium 的断言/验证命令等?

【问题讨论】:

    标签: python unit-testing selenium selenium-webdriver webdriver


    【解决方案1】:

    webdriver 是一个用于驱动浏览器的库。您要使用的是 *find_element* 方法来定位元素,然后针对它们断言条件。

    例如,此代码对元素的内容进行断言:

    from selenium import webdriver
    
    browser = webdriver.Firefox()
    browser.get('http://www.example.com')
    element = browser.find_element_by_tag_name('h1')
    assert element.text == 'Example Domains'
    browser.quit()
    
    • 请注意,此示例是纯 Python,带有一个简单的断言。最好使用像 python 的 unittest 这样的测试框架,它有更强大的断言。

    【讨论】:

    • 应该是一个单独的问题,但在这里是相关的:我如何断言页面上不存在元素?
    • 在这里找到我的答案:sqa.stackexchange.com/questions/3481/…
    • 我宁愿为 find_element_by_tag_name 调用做一些 try/except NoSuchElementException 块,因为如果找不到元素,那么测试将标记异常 ERROR 而不是 FAILure... 或者是否有没有这种不便的断言元素的方法存在?
    【解决方案2】:

    在 Selenium RC 中,存在验证/断言方法。在 WebDriver 中,它们没有。此外,重要的是要注意 verify 和 assert 的作用以及它们在测试中的作用。在 Selenium RC 中,verify 用于在您的测试中执行检查,无论是文本、元素还是您拥有的东西。另一方面,断言将导致测试失败并停止。您引用的链接中讨论了好处和优势。

    WebDriver 没有验证/断言方法。断言在测试本身中执行。如果您看一下 Corey 的答案,他会对元素的文本执行“断言”。如果元素的文本不是“示例域”,则会引发 AssertionError,从而导致测试失败。但是验证呢?如前所述,WebDriver 没有。但是您仍然可以通过比较来执行等效的操作。

    if element.text != u'Example Domains':
        print "Verify Failed: element text is not %r" % element.text
    

    所以在这种情况下,您的测试不会失败。但仍会进行验证并将打印到标准输出。

    所以说到底,这是你想要失败的问题。它更像是一个测试设计。希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      您应该使用以下功能来检查:

      def is_element_present(self, how, what):
          try: self.driver.find_element(by=how, value=what)
          except NoSuchElementException as e: return False
          return True
      

      这是Selenium IDE导出到Python代码时默认生成的。

      然后你可以断言元素如下:

      self.assertTrue(self.is_element_present(By.ID, "footer"))
      self.assertTrue(self.is_element_present(By.CSS_SELECTOR, "header.global-header"))
      

      请注意,使用By需要以下导入:

      from selenium.webdriver.common.by import By
      

      【讨论】:

        【解决方案4】:

        另一种方式如下:

        from selenium import webdriver
        driver = webdriver.Firefox()
        driver.get('http://www.testing.com')
        element = driver.find_element_by_xpath('xpath of the element').text
        assert element == 'Sample Text'
        driver.quit()
        

        【讨论】:

          【解决方案5】:

          验证断言

          driver= webdriver.Firefox()
          
          String x =driver.findElement(By.xpath("//*[@id='userNavLabel']")).getText();
          
          System.out.println(x);
          
          //Assert.assertEquals(actual, expected)
          
          Assert.assertEquals("Anandan Aranganath", x);
          

          【讨论】:

          • 硒 python 问题。不是Java
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-04
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          相关资源
          最近更新 更多