Article
使用Selenium录制测试脚本,测试Mercury Tours网站
00 分钟
2020-5-27
2023-5-21
type
status
category
date
slug
summary
tags
icon
Last edited time
May 21, 2023 07:57 AM

一、需求

1、学习使用了解 Selenium(Quicktest) 自动化功能测试工具,了解 Quicktest i 测试工具的测试模式和过程
2、掌握使用 Selenium(Quicktest) 录制测试脚本、执行并分析测试脚本。
使用 Quicktest 对 Mercury Tours 网站http://newtours.demoaut.com/index,php 或者 http://demoaut.com/进行功能测试。要求录制预订机票的完整过程,然后执行测试脚本并分析结果。

二、实现

1、安装火狐浏览器

火狐的SeleniumIDE比较方便

2、安装SeleniumIDE

  1. 点击右上角这个三条杠、点击附加组件
<img src="" width="60%">
  1. 搜索框输入SeleniumIDE
    1. notion image
  1. 点进去、点击安装
  1. 安装成功后显示在右上角
    1. notion image

3、使用SeleniumIDE

  1. 点击插件图标
    1. 可以选择第一个Record a new test in a new project
      notion image
  1. 输入项目名
    1. notion image
  1. 输入要测试的网页地址
    1. notion image
      随后弹出要测试的网页和SeleniumIDE主页面
  1. 主页面
    1. 左边是SeleniumIDE,右边是要测试的网页
      notion image
此时,我们在测试网页上的所有操作都会被Selenium记录下来
我这里先在测试网页上做订票的操作
订票已经完成
notion image
Selenium记录下了所有操作
notion image
点击右上角的停止录制
notion image
输入这个测试的名称,得以保存运行
notion image
点击运行脚本
<img src="">
若无意外则将一路绿灯,然后最下面显示
completed successfully
notion image

4、Selenium检测

Selenium测试命令分为3种操作(action)辅助(accessors)断言(assertion)
  1. 操作(action)
    1. open(打开页面)
      click(点击)
      clickAndWait(点击并等待)
      type(文本类型)
      select(选择下拉菜单)
      selectWindow(选择弹出窗口)
      pause(等待指定时间,以毫秒为单位,即要睡眠的时间)
      setSpeed(设定执行速度。以毫秒延迟间隔长度。默认没有延迟,即为0)
      setTimeout(指定等待动作完成的等待时间。默认为30秒。
      需要等待的动作包括了OPEN 和WAITFOR)
      goBack(模拟用户点击其浏览器上的“back”按钮)
      close(模拟用户点击弹出窗体或表单标题栏上的”关闭”按钮)
  1. 辅助(accessors)
    1. 这是辅助工具。用于检查应用程序的状态并将结果存储到变量中。
      如:storeElementPresent(locator,variableName)
      其中参数:locator 表示元素定位器;variableName 用于存储结果的变量名。
      即将locator定位到的状态存储到variableName变量中。
      如果该元素出现返回true,否则返回false
      可同断言一同使用。
  1. 断言(assertion)
    1. 验证应用程序的状态是否同所期望的一致。
      常见的断言包括:验证页面内容,如标题是否为X或当前位置是否正确,或是验证该复选框是否被勾选。
      selenium 提供了三种模式的断言:assert 、verify、waitfor   Assert 失败时,该测试将终止。   Verify 失败时,该测试将继续执行,并将错误记入日显示屏 。也就是说允许此单个 验证通过。确保应用程序在正确的页面上   Waitfor 用于等待某些条件变为真。可用于 AJAX 应用程序的测试。
      如果该条件为真,他们将立即成功执行。如果该条件不为真,则将失败并暂停测试。直到超过当前所设定的超过时间。一般跟setTimeout时间一起使用
      assertLocation(判断当前是在正确的页面)、
      assertTitle(检查当前页面的 title 是否正确)、 assertValue(检查 input 的值, checkbox 或 radio,有值为”on”无为”off”)、 assertSelected(检查 select 的下拉菜单中选中是否正确)、 assertSelectedOptions(检查下拉菜单中的选项的是否正确)、 assertText(检查指定元素的文本)、 assertTextPresent(检查在当前给用户显示的页面上是否有出现指定的文本)、 assertTextNotPresent(检查在当前给用户显示的页面上是否没有出现指定的文本)、 assertAttribute(检查当前指定元素的属性的值)、 assertTable(检查 table 里的某个 cell 中的值)、 assertEditable(检查指定的 input 是否可以编辑)、
      assertNotEditable(检查指定的 input 是否不可以编辑)、 assertAlert(检查是否有产生带指定 message 的 alert 对话框)、 verifyTitle (检查预期的页面标题) verifyTextPresent (验证预期的文本是否在页面上的某个位置) verifyElementPresent(验证预期的UI元素,它的HTML标签的定义,是否在当前网页上) verifyText(核实预期的文本和相应的HTML标签是否都存在于页面上) verifyTable(验证表的预期内容) waitForPageToLoad(暂停执行,直到预期的新的页面加载) waitForElementPresent (等待检验某元素的存在。为真时,则执行。)
      验证和断言的区别:验证失败后不影响脚本的继续执行,断言失败后将停止脚本的执行。
  1. 异常类型
      • *AssertionError:**assert语句失败
      AttributeError:试图访问一个对象没有的属性
      IOError:输入输出异常,基本是无法打开文件
      ImportError:无法引入模块或者包,基本是路径问题
      IndentationError:语法错误,代码没有正确的对齐
      IndexError:下标索引超出序列边界
      KeyError:试图访问字典里不存在的键
      KeyboadrInterrupt:Ctrl+c被按下
      NameError:使用一个还未赋值对象的变量
      SyntaxError:python代码逻辑语法错误,不能执行
      TypeError:传入的对象类型与要求不符
      • *UnboundLocalError:**试图访问一个还未设置的全局变量,基本上是由于另有一个同名的全局变量,导致你以为在访问
      ValueError:传入一个不被期望的值,即使类型正确

5、检测实例

例如我们想要检测订票完成后的网页中,Passengers里显示的是否是1 passenger(因为如果出错,可能是2 or 3 passenger)
notion image
  1. 新建一条脚本命令
    1. 点击最下方命令的下面
      notion image
  1. 输入命令名称
    1. notion image
  1. 点击Target栏此个图标
    1. notion image
  1. 选择目标
    1. notion image
  1. Target将自动填充你选择的目标
    1. notion image
  1. Value填写我们期待的值,例如此处我填写1 passenger
    1. notion image
  1. 将命令移动到合适的地方
    1. 新增的断言命令,需要移动到合适的地方意思是你的脚本执行到断言命令的前一条命令之后所在页面需要显示你需要检测的内容,这个是个小注意点我这里已经就是页面最后了,所以不用移动
  1. 运行测试
    1. notion image
      可以看到断言检测成功了

评论