当前位置: 首页 > 面试题库 >

Selenium3.4.0-Python3.6.1:在使用unittest的Selenium- Python绑定中,我如何决定何时使用self.assertIn或assert

邓翼
2023-03-14
问题内容

我正在使用Selenium 3.4.0和Python
3.6.1。我已经通过Python文档通过unittest模块编写了一个脚本,该模块是基于Java的内置Python,JUnit在Windows 8
Pro计算机,64位OS,x-64处理器上使用geckodriver 0.16.1和Mozilla Firefox
57.0。在我的测试方法test_search_in_python_org()中,以下几行效果很好:

    def test_search_in_python_org(self):
      driver = self.driver
      driver.get("http://www.python.org")
      self.assertIn("Python", driver.title)
      elem = driver.find_element_by_name("q")
      elem.send_keys("pycon")
      elem.send_keys(Keys.RETURN)
      assert "No results found." not in driver.page_source

当我断言“页面标题”时,我正在使用: self.assertIn("Python", driver.title)

但是,当我声明一个字符串(我的假设)时,在页面源中使用的是: assert "No results found." not in driver.page_source

我的问题是什么因素/条件决定了我应该使用self.assertIn还是简单使用 assert

任何建议或指示将对您有所帮助。


问题答案:

看一下Python unittest
文档,同时回顾一下我曾经在这里进行的一系列Django单元测试,这些都是我的发现。

使用案例:

第一件事是最简单的事情,而我认为两者之间最大的不同是可以使用每个命令的情况。在测试类的情况下,它们都可以互换使用,但是,要使用该assertIn命令,您需要导入unittest库。所以,说我想知道是否hhello。通过assertIn命令执行此操作的简单方法是:

class MyTestCase(unittest.TestCase):
    def is_h_in_hello(self):
        self.assertIn("h", "hello")

然后我需要运行测试,即通过unittest.main()本示例进行测试,以获得答案。但是,使用该assert命令可以更轻松地查看hin
hello。这样做非常简单:

assert "h" in "hello"

但本质上,两者都会给我相同的答案。但是,两种方法的区别在于第二种方法的使用简便。

结果:

我发现的第二个区别是结果在Python
Shell上的可读性。该unittest库的设计,使得命令是非常具体的。因此,如果测试失败,您将收到一条非常明确的消息,指出出了什么问题。现在说,你想看看是否bhello。通过class方法(只需更改"h""b")进行操作,运行测试后得到的消息是:

AssertionError: 'b' not found in 'hello'

----------------------------------------------------------------------
Ran 1 test in 0.038s

FAILED (failures=1)

因此,它非常清楚地告诉您:'b' not found in 'hello',这使您很方便地查看问题所在。但是说您通过assert命令执行相同的过程。生成的错误消息类似于:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    assert "b" in "hello"
AssertionError

尽管它告诉您错误类型(AssertionError)和回溯,但并没有特别告诉您"b" is NOT in "hello"。在这种简单的情况下,很容易查看回溯并说哦,您好!但是,在更复杂的情况下,要弄清为什么会生成此错误消息可能会很棘手。

总体而言,这两种方法非常相似,可以为您提供所需的结果,但是从本质上讲,这归因于此处和此处的微小差异,更少的代码行以及Shell消息的直接性。



 类似资料:
  • 问题内容: 只是想了解在AngularJS中使用ngView和ngInclude的方法的确切区别。什么时候在另一个之上使用是正确的?谢谢。 问题答案: ngView与路由配合使用,并且对于角度SPA来说至关重要。它通常用于包含网站的主要内容,即每当用户单击链接时,页眉和页脚之间的位置就会改变。它与路由的集成意味着更改ngView内容也会更改控制器(取决于您的配置)。 ngInclude是通用的包含

  • 问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我对这种东西是陌生的,但是最近我已经听到很多关于Node.js有多出色的信息。考虑到我一般喜欢使用jQuery和JavaScript有多少,我不禁想知道如何决定何时使用Node.js。我想到的Web应用程序有点像Bitly-需要一些内容,然后将其存档。 从过去几天我所做的所有作业中,我获得

  • 我是新手,但最近我听到很多关于Node.js有多好的消息。考虑到总体上我是多么热爱使用jQuery和JavaScript,我不禁想知道如何决定何时使用Node.js。我心目中的web应用程序类似于Bitly-获取一些内容,并将其存档。 从过去几天我一直在做的所有作业中,我获得了以下信息。node.js 是一个命令行工具,可以作为常规web服务器运行,允许运行JavaScript程序 使用great

  • 问题内容: 一个简单的问题:在通过Python绑定使用Selenium时,如何完全禁用日志记录,示例代码如下: 我已经尝试过类似的事情: 甚至: 但文件“ chromedriver.log”仍出现在每次新的测试中。 问题答案: Chrome浏览器的网络驱动程序的源代码显示了名为的选项的存在。 因此,如果要删除文件,可以将此属性设置为 如果您在Linux / Unix下运行; 在窗户下 希望能帮助到

  • 我想截屏Selenium中的一个元素,根据文档,每个WebElement都有一个功能: 截图(文件名) 将当前元素的屏幕截图保存到PNG图像文件。如果有任何IOError,则返回False,否则返回True。在文件名中使用完整路径。 Args:filename:您希望将屏幕截图保存到的完整路径。这应该以一个简单的结尾。png扩展 用法:元素。截图(“/Screenshots/foo.png”) 但

  • 我不能启动Safari浏览器从硒网络驱动程序。我使用Python绑定。找不到任何提供Python详细步骤的参考。我知道有一个相关的问题stackoverflow,但它不回答python-python selenium网络驱动Safari驱动程序 遵循http://code.google.com/p/selenium/wiki/SafariDriver,下载并安装了safari开发者证书。此文档包含