- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Selenium 3.4.0 和 Python 3.6.1。我通过 unittest
模块编写了一个遵循 Python 文档的脚本,该模块是基于 Java 的 JUnit
的内置 Python,在 Windows 8 Pro 上使用 geckodriver 0.16.1 和 Mozilla Firefox 57.0机器,64 位操作系统,x-64 处理器。在我的测试方法 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)
但是,当我断言一个字符串(我的假设)时,在我使用的页面源代码中:断言“未找到结果”。不在 driver.page_source
我的问题是决定我应该使用 self.assertIn
还是简单地使用 assert
的因素/条件是什么?
任何建议或指示都会有所帮助。
最佳答案
查看 Python unittest
documentation还回顾了我曾经不得不在这里做的一堆 Django 单元测试,这是我的发现。
用例:
首先是最简单的事情,在我看来两者之间最大的区别是您可以使用每个命令的情况。它们在测试类的情况下可以互换使用,但是,为了使用 assertIn
命令,您需要导入 unittest 库。所以,假设我想知道 h
是否在 hello
中。通过 assertIn
命令执行此操作的一种简单方法是:
class MyTestCase(unittest.TestCase):
def is_h_in_hello(self):
self.assertIn("h", "hello")
然后我需要运行测试,即通过本例中的 unittest.main()
,以获得我的答案。但是使用 assert
命令,可以更容易地查看 h
是否在 hello
中。这样做非常简单:
assert "h" in "hello"
但本质上,两者都会给我相同的答案。然而,这两种方法的区别在于第二种方法的使用简单。
结果:
我发现的第二个区别是 Python Shell 结果的可读性。 unittest
库的设计使得命令非常具体。因此,如果测试失败,您将收到一条非常明确的消息,说明出了什么问题。假设现在您想查看 b
是否在 hello
中。通过类方法(只需将 "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"不在 "hello"
中。在这个简单的例子中,很容易看到回溯并说哦,hello 中没有 b!但是,在更复杂的情况下,可能很难弄清楚为什么会生成此错误消息。
总的来说,这两种方法非常相似,都会得到您想要的结果,但本质上,它归结为各处的细微差别,代码行数更少,Shell 消息非常直接。
关于python - Selenium3.4.0-Python3.6.1 : In Selenium-Python binding using unittest how do I decide when to use self. assertIn or assert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44354698/
Akka 新手。创建一个扩展 SupervisorStrategy 的新 Scala 类为我提供了以下模板: class MySupervisorStrategy extends Supervisor
Selenium Webdriver如何确定按钮是启用还是禁用?我用过isEnabled() 两个按钮的方法-一个启用,另一个禁用,但在两种情况下均返回true。除了使用isEnabled()之外,还
我试图让闭包编译器内联一些以简单模式封装在配置对象中的代码,而无需任何类型注释。 React does this并设法降低 bundle 大小 我观察到以下情况: a.js (function mai
我一直在尝试针对 Android 进行改造。响应为空。如果我的理解是正确的,这可能是因为 400 响应或我的模型类中的响应建模不正确。我得到的响应如下: {"itemA":"data", "itemB
我正在尝试使用 Accord 库实现的 k 最近邻。首先,我使用了 double[][] inputs = new double[15000][]; int[] out
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
当我们使用 sadd 在集合中插入一个成员时,是否有一种确定的方式来插入数据?例如, 127.0.0.1:6380> smembers test 1) "hello world" 2) "hello"
我已经看过一些YOLO教程,但是我发现很难确定要分割图像的每个单元格的“ anchor ”框是否是预先确定的。在我经历的其中一个指南中,该图像被分为 13x13 单元格,并指出每个单元格预测 5 an
有没有办法在 Coq 中对相互递归类型使用决定相等策略? 例如,如果我有这样的东西: Inductive LTree : Set := | LNil | LNode (x: LTree) (y
我有几个类,例如 MyClassA MyClassB MyClassC 和 MyClassD 我想要一个给定 Class 类型的函数,该函数将创建(并执行任何操作......)一个作为该类实例的对象。
如何从以下 mysql 查询的 where 子句中引用 'decider'? SELECT *, CASE WHEN (cond1) THEN 1 W
我正在使用 C++ 中的 QuickFix 为代理 FIX 平台实现启动器端。他们的 FIX 规范提供了他们支持的消息列表;登录、心跳和其他消息。 MessageCracker(修复 4.2)为同一类
我正在尝试使用 Accord.NET 库进行对象分类,但我未能找到任何合适的示例,并且文档不足以理解该过程。我当前的代码是 Predictor = new Boost(); AdaBoost Algo
今天我在 msdn 中看到博客,我注意到如何计算算法的时间复杂度。我完全理解如何计算算法的时间复杂度,但最后作者提到了以下几行 Adding everything up I get (N+4)+(5N
随着我们的办公室升级到 Window 7,我的任务是更新登录脚本以与 Windows 7 一起使用。所述脚本的创建者早已不复存在,我不是批处理文件专家。 我要做的是确定操作系统。当我执行一些网络管理职
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
当我尝试在 Mac 上的 Andriod Studio 上运行该项目时,出现如下内部错误: Andriod Emulator closed because of an internal error:
我正在阅读一篇关于 Haskell 以及 HList 是如何实现的研究论文,并想知道所描述的技术何时可以确定,何时不能确定类型检查器。此外,因为您可以使用 GADT 做类似的事情,所以我想知道 GAD
我最近在一个用GCC 8编译的软件中研究了段错误。代码如下所示(这只是一个草图) struct Point { int64_t x, y; }; struct Edge { // some o
大多数句子分割器都能够在正确的位置分割文本流。 我正在寻找一个模型来决定某些文本是否是句子。 最佳答案 简单的解决方案:使用解析器(例如,Stanford Parser,它是免费的并且是Java的,但
我是一名优秀的程序员,十分优秀!