说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!
接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/103920889
关于Python语言下使用Selenium框架完成Web功能自动化测试,早在之前的Selenium3与Python3实战开发Web自动化测试框架(一)以及Web自动化测试实战(一)系列文章中就有过详细介绍使用

一、环境搭建

1.安装 python

✔     这里安装 3.6 版
✔     注意勾选添加环境变量
-
在这里插入图片描述

2.安装 selenium

✔     pip install selenium-3.12.0-py2.py3-none-any
在这里插入图片描述

3.准备浏览器驱动器

✔     IEDriverServer、chromedriver(google)、geckodriver(Firefox)
✔     webdriver.Ie()、.Chrome()、.Firefox()
✔     均无需安装,复制到\Python36-32 中即可

  • 将浏览器驱动文件拷贝到python的安装目录下,驱动文件与java环境下的都是一样的
    在这里插入图片描述

4.HTMLTestRunner.py

✔     无需安装或配置
✔     用于生成测试结果报告
✔     可以自己修改

  • 博主使用的是Selenium3与Python3实战开发Web自动化测试框架中的HTMLTestRunner.py生成测试报告的模块,这里编程没有使用Pycharm而是使用python自带的IDLE,现在桌面创建一个test.py文件,打开方式选择IDLE打开即可,或者是从开始菜单中打开IDLE
    在这里插入图片描述

二、编写脚本

1.导入包

  • from selenium import webdriver

  • from selenium.webdriver.support.select import Select
    ✔     用以支持下拉列表对象

  • from time import sleep

  • F5运行,可查看语法是否有误
    在这里插入图片描述

2.打开和关闭浏览器

  • driver=webdriver.Ie()
    ✔     webdriver.Chrome()
    ✔     webdriver.Firefox()
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • driver.close()
    ✔     关闭浏览器
    在这里插入图片描述
  • driver.quit()
    ✔     关闭浏览器以及浏览器驱动程序
    在这里插入图片描述

3.打开 Url

  • driver.get(“url 地址”)
    在这里插入图片描述

4.等待时间

  • sleep(3)
    ✔     wait 3s
  • driver.implicitly_wait(3)
    ✔     隐性等待时间为 3 秒
    在这里插入图片描述

5.切换框架/窗口

  • 使用 switch_to 包

  • 定位到当前聚焦的元素上
    ✔     driver.switch_to.active_element()

  • 切换到 alert 弹窗
    ✔     driver.switch_to.alert()

  • 切换到主页面
    ✔     driver.switch_to.default_content()

  • 切换到某个 frame
    ✔     driver.switch_to_frame(编号或 name)

  • 切换到指定的 window_name 页签
    ✔     driver.switch_to_window(window_name)

  • 切换到上一层的 frame
    ✔     driver.switch_to.parent_frame()

6.定位页面元素

  • driver.find_element_by_
    ✔     name(“login”)
    ✔     id
    ✔     xpath
    ✔     tag_name
    ✔     link_text
    ✔     partial_link_text
    ✔     class_name

  • driver.find_elements_by_
    ✔     name(“控件 name 名”)[下标]

  • Select(driver.find_elements_by_?)
    ✔     用于识别下拉列表元素
    ✔     需要导入包
           ★     from selenium.webdriver.support.select import Select

7.页面元素的属性和方法

  • driver.title()
    ✔     获得网页标题

  • 对象.text
    ✔     获得页面元素的文本值
    ✔     属于属性

  • 对象.get_attribute(“属性名”)
    ✔     获得指定属性的值

  • Select(对象).select_by_value
    ✔     需要导入包
           ★     from selenium.webdriver.support.select import Select
    ✔     select_by_index
    ✔     select_by_visible_text
    ✔     deselect_all()
           ★     取消所有选项
    ✔     deselect_by_index()
           ★     取消对应 index 选项
    ✔     deselect_by_value()
           ★     取消对应 value 选项
    ✔     deselect_by_visible_text()
           ★     取消对应文本选项
    ✔     first_selected_option()
           ★     返回第一个选项
    ✔     all_selected_options()
           ★     返回所有的选项
    ✔     页面元素.send_keys(“数据”)
           ★     用于键盘输入数据
    ✔     页面元素.click()
           ★     支持单选按钮、复选框、命令按钮

8.webtours案例

8.1 登录

  • 通过之前基于Java语言的Selenium的文章,那么同理使用python操作selenium完成webtours网站的登录
    在这里插入图片描述
  • 运行脚本,成功完成webtours网站的登录
    在这里插入图片描述

8.2 注册

  • 首先切换到注册所在的页面框架即也就是body下的info,然后通过find_element_by_link_text方法查找链接文本的方式定位注册链接元素
    在这里插入图片描述
  • 运行脚本,成功通过链接文本定位到注册元素,点击进入注册页面
    在这里插入图片描述
  • 如果当链接文本比较多的话,不想写全,可以通过find_element_by_partial_link_text方法即可
    在这里插入图片描述
  • 紧接着进入到注册页面,首先又需要切换框架,然后定位元素发送数据,最后点击继续按钮,由于之前的文章已经详细说明过这一系列的操作包括怎么样进行元素定位,所以这里博主就直接开写了不详细演示了
    在这里插入图片描述
  • 运行脚本,成功完成cdtaogang2用户的注册
    在这里插入图片描述

三、增强脚本

1.检查点

1.1 in 运算符

  • str1 in str2
    ✔     用于判断 str1 是否存在于 str2 中

1.2 if 语句

  • if (条件表达式):
        语句
    else:
        语句
    ✔     括号可以省略
    ✔     语句必须缩进
    ✔     英文冒号不能省略

  • 检查注册是否成功,首先需要打印出注册完成后的info框架页面的文本数据
    在这里插入图片描述

  • 检查注册成功的页面数据属于blockquote标签,之前在java文章中打印的tagName为body,这里也可以选择body,因为body标签下只有一个blockquote标签,所以博主就打印这个也是可以的
    在这里插入图片描述

  • 运行脚本,查看结果成功打印出blockquote标签下的文本数据,因为脚本中使用之前已经注册成功的用户名cdtaogang2所以提示用户名被占用
    在这里插入图片描述

  • 紧接着在代码中修改未注册的用户名cdtaogang3,然后添加判断即可
    在这里插入图片描述

  • 运行代码,结果显示注册成功
    在这里插入图片描述

2.参数化

2.1 for 循环

  • for i in range(初值,终值+1):
            语句
    ✔     冒号不能省略
    ✔     range 表示范围
    ✔     语句必须缩进

2.2 读 txt 文件

  • file=open(文件名,‘r’)
    ✔     返回文件对象,文本默认编码方式是 UTF-8。
    ✔     'r’表示只是读,默认项。
    ✔     读取时默认会将平台有关的行结束符(Windows 中是\r\n)转换为\n。
    ✔     文件名外使用 r 可以禁止\转义。

  • 遍历文件
    ✔     for 变量 in file
           ★     输出变量即可读出整个文件。
           ★     按行读出。
    ✔     list=file.readlines( )
           ★     把文件中的所有行读到一个列表中,换行符可读出。
           ★     len(list)
                   ■     返回列表中的元素个数

  • 关闭文件
    ✔     file.close( )
           ★     释放文件占用的系统资源。

  • 创建txt文件用于存放注册使用的用户名及密码,然后再创建一个测试模块
    在这里插入图片描述

  • 删除之前注册成功用户数据文件
    在这里插入图片描述

  • 在readfile模块中编写读取文件内容的代码,有两种一种是open的方法另一种是with open的
    在这里插入图片描述

  • 通过split方法分割读取的数据存于列表中,通过列表下标方式可以分别取出用户名密码
    在这里插入图片描述

  • 那么还有一种这是读取所有行的数据,然后再通过遍历行数来读取第i行列表数据再取出下标来获取用户名和密码
    在这里插入图片描述

  • 回到脚本中,然后读取users.txt数据,分别取出用户名和密码,然后替换掉send_keys方法中的参数,完成参数化
    在这里插入图片描述

  • 运行脚本,实际全部都注册成功了,但是检查点结果却显示只有最后一个用户cdtaogang3显示成功,原因很简单,因为以上代码将检查点中的预期结果写死了,所以出现了以上结果
    在这里插入图片描述

  • 修改检查点预期结果,然后删除存储的用户注册数据文件,运行脚本,检查点全部成功
    在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐