如何检查Selenium Python中的find_element_by_是否失败?

时间:2018-08-10 13:18:10

标签: python selenium webdriver

我在使用 find_element_by_name find_element_by_id 和类似名称时有疑问。 例如,在此代码中:

self.elem = self.driver.find_element_by_name("username").send_keys("admin")
self.elem = self.driver.find_element_by_name("password").send_keys("admintest")

我应该如何检查是否发生了某些错误?我知道我可以做到:

try:
    self.elem = self.driver.find_element_by_name("username").send_keys("admin")
except:
    print("OK, some problem happened to find username...")
    sys.exit(1)

try:
    self.elem = self.driver.find_element_by_name("password").send_keys("admintest")
except:
    print("OK, some problem happened to find password...")
    sys.exit(1)

但是,如果这样做,我将有很多源代码。因此,还有其他人可以检查退货吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

通常,在测试代码中,您不应处理脚本引发的任何异常,因为引发异常时,您的脚本 meant 会失败,而这正是您通常希望从脚本中获取的异常。

例如,如果您编写类似-

self.elem = self.driver.find_element_by_name("some_name")

现在,如果您正在测试的HTML页面不包含任何此类元素,则脚本应该无法指示此类事件显示任何抛出的异常。

您可能只想在特定情况下处理测试脚本中的任何异常,例如-

1)您想与其他定位器找到相同的元素(虽然不是很好的做法)。

2)您需要等待一段时间,然后再次尝试查找相同的元素(这不是一种很好的做法,应改用C# HttpClient 4.5 multipart/form-data upload)。

3)您不希望当找不到单个元素时脚本立即失败。可能是您希望自己的脚本至少继续查找其他元素并执行其他声明,以便使您全面了解Web应用程序的当前状态。

4)您希望以一种用户友好的方式(就像您一样)显示引发的异常以及堆栈跟踪。

5)您希望对在套件中运行的测试进行失败计数(通常不需要这样做,因为您的运行程序会提供构建摘要)。

因此,总的来说,并没有确凿的理由来处理脚本中的任何异常,因为理想情况下,测试脚本应该在没有任何异常的情况下运行。处理这些错误将使您的跑步者无法将其识别为失败的测试,并且不会达到编写脚本的目的。