返回

软件测试:Selenium 脚本编写注意点 (一)

见解分享

在使用 Python + Selenium 编写 UI 自动化脚本时,我们必须注意到以下几点,以确保脚本的有效运行。

一、睡眠时间

  1. 强制等待时间 sleep()

强制等待生效时间 = 等待时间 - 当前时间

  • 必须导入 time 包后才可以使用。

  • 强制等待生效时间 <0,脚本就会报错。

  1. 隐式等待时间 implicitly_wait()
  • 不导入 time 包就可以使用。

  • 隐式等待生效时间 >0 时,如果要查找的元素在等待时间内没有找到,那么脚本将抛出 NoSuchElementException 异常。

  • 隐式等待生效时间 <0,脚本就会报错。

  • 一个场景中只使用一种等待时间。

  1. 显式等待时间 WebDriverWait()
  • 导入 time 包后才可以使用。

  • 显式等待生效时间 >0 时,如果要查找的元素在等待时间内没有找到,那么脚本将继续执行。

  • 显式等待生效时间 <0,脚本就会报错。

  • 一个场景中只使用一种等待时间。

二、定位元素的优先级

  1. id
  • id 是最快的定位方式。

  • 如果 id 找不到,那么就不可能找到该元素。

  1. name
  • 比 id 稍慢,但比其他定位方式快。

  • 如果 name 找不到,那么就不可能找到该元素。

  1. class name
  • 比 name 慢,但通常比其他定位方式快。

  • class name 不唯一时,可以使用 find_elements() 方法定位所有匹配的元素。

  1. tag name
  • 比 class name 慢,但通常比其他定位方式快。

  • tag name 不唯一时,可以使用 find_elements() 方法定位所有匹配的元素。

  1. link text
  • 比 tag name 慢,但通常比其他定位方式快。

  • link text 是整个链接的文本。

  1. partial link text
  • 比 link text 慢,但通常比其他定位方式快。

  • partial link text 是链接的一部分文本。

  1. xpath
  • 比其他定位方式都慢。

  • xpath 是最灵活的定位方式。

  • xpath 可以定位任何元素。

三、断言

  1. assertEqual()
  • 比较两个值是否相等。

  • 如果不相等,那么脚本将抛出 AssertionError 异常。

  1. assertNotEqual()
  • 比较两个值是否不相等。

  • 如果相等,那么脚本将抛出 AssertionError 异常。

  1. assertTrue()
  • 断言一个值是否为 True。

  • 如果为 False,那么脚本将抛出 AssertionError 异常。

  1. assertFalse()
  • 断言一个值是否为 False。

  • 如果为 True,那么脚本将抛出 AssertionError 异常。

  1. assertIn()
  • 断言一个值是否在列表中。

  • 如果不在列表中,那么脚本将抛出 AssertionError 异常。

  1. assertNotIn()
  • 断言一个值是否不在列表中。

  • 如果在列表中,那么脚本将抛出 AssertionError 异常。

四、异常处理

  1. try...catch
  • try...catch 块可以捕获脚本运行过程中抛出的异常。

  • try 块中包含要执行的代码。

  • catch 块中包含捕获异常后的处理代码。

  1. finally
  • finally 块在 try...catch 块执行完毕后执行。

  • finally 块中的代码无论如何都会执行。