基于python的自动化测试(selenium)

  • Post author:
  • Post category:python


自动化测试的优势:

节省时间,人力成本,提高我们测试效率 ,重复使用,

选取自动化测试脚本的因素:

1.

项目影响

:自动化能否让开发更敏捷

2.

复杂度

:自动化是否易于实现,包括数据与其他环境影响

3.

时间

:自动化实现的时间,编写脚本所消耗的时间

4.

维护编码工作量

,以及代码的稳定性能否合格,可维护性强

5.覆盖率:是否覆盖关键特性和功能

6.

资源利用率的问题

,是否花费大量时间

7.自动化的执行过程,能否有

足够的使用空间

8.

用于兼容性测试

(修改少量代码测试不同平台的兼容性)

自动化测试的产生:

自动化测试通过对人工操作,完成对被测系统的输出,并且对输入有校验功能

selenium

使用javascript语言编写

selenium用于验证浏览器页面的行为

安装selenium:在终端命令行输入pip install selenium 或者  pip3  install  selenium

注意该selenium默认安装到python的安装目录/lib/site-packages中

配置浏览器驱动程序,将firefox浏览器驱动器复制到python安装目录下

运行脚本,查看浏览器是否能正常打开

from selenium import webdriver
dr = webdriver.Firefox()
dr.get("https://www.baidu.com")  

1.selenium  IDE,

一个类似qtp脚本录制火狐插件

2.在Firefox浏览器的【扩展和主题】菜单中打开,搜索Selenium IDE。找到后,选择【添加到Firefox】。

webdriver基础

1.连接和沟通浏览器


from selenium import webdriver

定义一个浏览器对象


driver=webdriver.Firefox()

需要拥有 与浏览器匹配的驱动程序

selenium支持适配的浏览器,ie      Firefox,chrome,safi,edge

2.浏览器地址的应用

创建浏览器对象后,使用get()方法打开浏览器。get(需要一个url地址变量)

url=“https:/wwwbaidu.com”

driver.get(url)

3.识别页面中的元素

浏览器终端ctrl+f查询元素出现的次数

打开网页查找网页元素。

右键元素点击检查,查看元素控件

其中class name是HTML标签的class属性

driver.find_elements_by_id("")

tag name是HTML中的标签名(加《标签名》)

link test是一个标签(链接文本)的文本内容

`<a  href=””>链接文本</a>`

xpath是HTML文档路径,页面信息的详细具体路径,区分相对绝对路径

一次定位一个元素:

`driver.foud_element(by.属性,"属性名")`

webdriver常用的操作方式

鼠标事件

需要先导入包:

from selenium.webdriver.common.action_chains import ActionChains

键盘事件

from selenium.webdriver.common.keys import Keys

find_element(By.ID,"id名字")send_keys(Key.CONTROL,“x”)

基本操作:


clear()

:主要针对文本框


click()

:主要针对文本框,提交按钮,图片,超链接等点击内容


send_keys(

)输入文本内容。主要针对文本框


实战脚本:

"""
使用火狐浏览器
打开百度首页
输入  Selenium自动化测试
点击 百度 按钮
"""
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

def test_open_baidu():

    driver = webdriver.Firefox()
    #打开网页
    driver.get("http://www.baidu.com")

    #定位页面元素,输入内容
    #driver.find_element_by_id("kw").send_keys("Selenium自动化测试")
    driver.find_element(By.ID,"kw").send_keys("Selenium自动化测试")
    #定位元素,点击按钮
    #driver.find_element_by_id("su").click()
    driver.find_element(By.ID,"su").click()

#test_open_baidu()
'''
将搜索结果的内容和文本,直接输出
'''

def test_output_result():

    driver = webdriver.Firefox()
    #打开网页
    driver.get("http://www.baidu.com")
    #强制休眠 3
    sleep(3)

    #定位页面元素,输入内容
    #driver.find_element_by_id("kw").send_keys("Selenium自动化测试")
    driver.find_element(By.ID,"kw").send_keys("Selenium自动化测试")
    sleep(3)
    #定位元素,点击按钮
    #driver.find_element_by_id("su").click()
    driver.find_element(By.ID,"su").click()
    sleep(10)
    #定位搜索结果,并输出
    res = driver.find_element(By.XPATH,"/html/body/div[2]/div[4]/div[1]/div[2]/div/div/div/div[2]/span").text
    print(res)
#test_output_result()

"""
获取页面中所有超链接的链接地址
"""
def test_output_linkurl():

    driver = webdriver.Firefox()
    #打开网页
    driver.get("http://www.baidu.com")
    #强制休眠 3
    sleep(3)
    #定位所有超链接,获取链接属性
    a_list = driver.find_elements(By.TAG_NAME,"a")#结果是一个列表
    for a in a_list:
        print(a.text,a.get_attribute("href"))
test_output_linkurl()


脚本元素报错:没有找到页面元素解决方式

1)更换元素的定位方式

2)在元素添加休眠时间,导入time包

from time import sleep

强制休眠sleep(3)


5.控制浏览器的操作

from selenium import webdriver
driver=webdriver.Firefox()
driver.set_window_size(180,800)
driver.quit()


2.窗口的前进,后退,刷新(涉及到窗口切换)

前进

driver.forward()

后退

driver.back()

刷新

driver.refresh()


获取验证信息:

断言:


浏览器信息验证:


浏览器对象.title

浏览器对象.current_url   浏览器的当前地址

浏览器对象.page_source   浏览器的页面代码


c 记录浏览器页面


页面元素.screenshot(图片名称和地址)    给元素截图

浏览器对象.get_screenshot_as_file(图片名称和地址)    给窗口截图   图片类型为png格式


.网页弹窗,框架的处理


警告框处理:alert    confirm    prompt


具体做法:switch_to.alert.accept()


7多框架切换

框架处理:针对frame 和 iframe框架

进入框架:浏览器对象

浏览器对象.switch_to.frame(id或者name,tag_name,xpath)


8.验证和纪录页面行为

验证元素的属性和特性:

size:可以获取元素的宽高属性

test:可以获取元素的文本属性


文件上传


8. 窗口截图


9.浏览器的关闭

close()关闭单个窗口

quit()关闭所有窗口


10.处理下拉列表

from selenium.webdriver.support.ui import Select
def test_select():
    dr = webdriver.Firefox()
    dr.get("file:///D:/testSelenium/testselect.html")
    sleep(2)
    #处理select标签
    #定位select标签
    pro = dr.find_element(By.ID,"pro")#定位标签
    # 通过select类将标签转化为selenium可以识别的Select
    # 转化完成后,选择
    Select(pro).select_by_value("河南省")#通过option的value属性查找和操作选项
    sleep(3)
    Select(pro).select_by_index(1)# 通过option在select中的位置下标选择选项
    sleep(3)
    Select(pro).select_by_visible_text("四川省")# 通过option标签对之间的文本信息进行选择


浏览器打开多窗口的验证

#浏览器打开多个窗口的验证
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

def test_windows():
    dr = webdriver.Firefox()
    # 打开地址
    dr.get("https://www.baidu.com")
    sleep(5)
    #输出当前浏览器页面标题
    print(dr.title)
    #输出浏览器的句柄
    print(dr.current_window_handle)
    # 点击新闻超链接
    dr.find_element(By.LINK_TEXT,"新闻").click()
    sleep(5)
    #再次打印页面标题
    print(dr.title)
    print(dr.current_window_handle)
    #打印输出所有的浏览器窗口句柄信息
    print(dr.window_handles)
    #浏览器多个窗口信息,会组成一个列表,每一个列表中的元素,都是窗口的句柄信息
    #如果需要切换窗口,则选择对应的窗口句柄
    dr.switch_to.window(dr.window_handles[1])
    sleep(2)
    # 新闻页面搜索
    dr.find_element(By.ID,"ww").send_keys("俄罗斯和乌克兰的冲突")
    sleep(2)
    dr.find_element(By.ID,"s_btn_wr").click()
    sleep(5)
    # 输出搜索结果页面的标题
    print(dr.title)
    # 关闭当前窗口
    dr.close()
    sleep(5)
    # 退出浏览器
    dr.quit()

test_windows()

实现对图片把内容的下载操作!

注意:


需要导入requests库


下拉滚动条!

可以用keys键盘事件滚动下拉框


获取cookie


利用cookie文件执行快捷登录操作

添加cookie前必须打开网页否则会报错


删除cookie文件



版权声明:本文为m0_59315964原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。