UI自动化测试的延续—全栈软件测试自动化(2)

发表于:2020-6-23 10:18

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:赵旭斌 余杰    来源:51Testing软件测试网原创

  1.1.2  PyCharm
  提及Python的集成开发环境(Integrated Development Environment,IDE),市面上有很多成熟、好用的产品,如PyCharm、Atom等。如果读者喜欢轻量级的产品,可以选择Sublime Text或者Atom。如果读者习惯了Eclipse的工作方式,可以选择使用PyDev。如果读者习惯使用Vim,可以通过一定的方法把Vim打造成Python的IDE。
  读者可以选择一款自己喜爱的编辑器使用,而本书选择目前非常流行的PyCharm。如果用户已经在使用它了,那么可跳过本节内容。
  PyCharm提供了代码分析、代码智能提示、代码调试、版本控制集成等众多实用功能,其分为专业收费版本和社区免费版本。对于使用Selenium进行自动化测试来说,采用社区免费版本即可。读者可以到JetBrains官方网站下载最新版本的PyCharm IDE客户端,如图1.10所示。
  图1.10  PyCharm官方下载页面
  需要特别注意的地方是,在PyCharm下载页面中,Professional是指专业收费版本,而Community则是指社区免费版本。用户可按个人的需求下载相应的版本,企业级专业用户建议使用专业收费版本。
  限于篇幅,安装PyCharm的过程不再具体阐述了。等安装完PyCharm以后,用户就可以使用并创建新项目了。
  如果用户的系统上安装了多个Python环境,那么PyCharm在用户创建项目的时候需要指定一个合适的Python版本(见图?1.11)。当然,如果用户使用了Virtualenv创建的Python虚拟环境,也需要记得在此处切换到用户已经创建的Python环境。在创建项目之后,可以编写一个基础的脚本来验证一下PyCharm的运行环境是否正常、Python脚本是否运行正常。
  图1.11  选择Python版本
  注意,如图1.11所示,Interpreter下拉列表中会出现所有用户已经安装好的不同版本的Python环境(Python 2和Python 3在语法上有一定的区别),用户可根据实际需要选择相应版本。
  如图1.12所示,首先,在项目根目录中新建一个Python文件。
  图1.12  在项目根目录中新建Python文件
  然后,在弹出的New Python file对话框中输入相应的文件名,如图1.13所示。输入相应的文件名后,单击OK按钮。此时,第一个Python文件就创建好了。
  下面可以尝试输入以下脚本。
 print('hello?selenium')
  接下来,在demo文件上右击,在弹出的快捷菜单中选择Run 'demo'命令即可运行脚本,如图1.14所示。
                 图1.13  输入Python文件名
图1.14  执行Python项目
  在上述脚本运行后,可以看到PyCharm的运行日志成功输出了“hello selenium”消息,如图1.15所示。
  图1.15  脚本运行结果
  如果读者进行到这一步且没有出现任何问题,说明已经成功完成了?Python IDE的准备工作,可以进入下一环节了。
  1.1.3  UI自动化测试的延续—Selenium WebDriver
  熟悉QTP/UFT的读者一定对Mercury Tours网站不陌生。该网站提供了一个模拟飞机订票的实例,很适合新手进行自动化测试实践。下面先从一段经典的脚本实例开始介绍这个实例。
    from selenium import?webdriver
  driver = webdriver.Firefox()
  driver.get("Mercury?Tours网站网址")
  assert?"Mercury Tours"?in?driver.title
  username_edit = driver.find_element_by_name("userName")
  password_edit=driver.find_element_by_name("password")
  login_button=driver.find_element_by_name("login")
  username_edit.send_keys("mercury")
  password_edit.send_keys("mercury")
  login_button.click()
  assert "Find a Flight"?in?driver.title
  driver.close()
  下面对上述脚本进行解释。
 from selenium import webdriver
  有Python基础的读者一看就明白,这一行代码的作用是导入Selenium的WebDriver模块。
 driver = webdriver.Firefox()
  通过webdriver.Firefox()创建一个Firefox浏览器的webdriver实例,并返回给变量driver。
 driver.get("Mercury Tours网站网址")
  这行代码表示跳转到飞机订票系统的页面。需要注意的是,此处的 driver.get()方法实际上会自动等待页面加载完毕再继续执行后续的方法。当然,如果页面中存在许多?AJAX加载形式,则此方法是无法智能地进行自动等待的,后面的章节会介绍如何处理这类情况。
 assert "Mercury Tours" in driver.title
  这行代码的作用是验证打开页面后的title是否包含“Mercury Tours”这个字符串。需要注意的是,如果验证失败,脚本会自动停止,后续脚本不会继续执行。
   username_edit = driver.find_element_by_name("userName")
  password_edit = driver.find_element_by_name("password")
  login_button = driver.find_element_by_name("login")
  Selenium提供了许多方式来识别对象,多数情况下以find_element_by开头,在by后面可以跟id、name、xpath和tag_name等。这个实例中使用的是find_element_by_name,从字面意思就可以理解,它根据对象的name属性进行识别,获取对象后自动返回给username_edit、password_edit和login_button变量。
  如何才能获取这个name属性值呢?对此问题,此处先不展开说明,后续章节会详细讲解如何抓取这些控件的属性值,并介绍更多的对象识别方式。
   username_edit.send_keys("mercury")
  password_edit.send_keys("mercury")
  login_button.click()
  识别到对象后,就可以直接与对象进行一些交互了,如单击、输入文本和选择下拉列表等。在本例中,输入的用户名和密码均是字符串mercury,最后单击login(登录)按钮进行登录。
 assert "Find a Flight" in driver.title
  在登录之后,出现的结果无非是两种情况,即登录成功或者登录失败。因此,需要验证登录成功后的页面标题是否包含“Find a Flight”字样。
 driver.close()
  最后这行代码的作用是关闭浏览器窗口。其实可以使用两种方式关闭浏览器窗口,除了driver.close以外,还可以使用driver.quit来关闭浏览器。区别在于,driver.close的作用是关闭浏览器当前的标签页,如果当前仅有一个标签页,那么就会关闭当前浏览器,而driver.quit会直接关闭整个浏览器,无论当前有多少个标签页。

查看《全栈软件测试自动化 Selenium和Appium (Python版)》全部连载章节
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号