Python自动化测试 | Selenium

Web网站开发流程

在这里插入图片描述

自动化测试

a测试分类

功能测试:检查实际的功能是否符合用户的需求。

性能测试:通过自动化测试工具模拟多种正常、峰值、负载条件来对系统的各项性能指标进行测试。

手工测试:制定case,测试工程师一步一步进行测试。

自动化测试:把以人为驱动的测试行为转化为机器自动执行的过程。

回归测试:修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。

b自动化测试优点
  1. 回归测试更方便
  2. 可以运行更多更繁琐的测试
  3. 更好地利用资源,一定程度上解放测试工程师
  4. 测试具有一致性和可重复性即测试用例的服用
c 适用自动化测试场景
  1. 任务测试明确,不会频繁变动
  2. 软件需求变动小
  3. 项目周期长,测试脚本可复用

Selenium相关

1、简介

Selenium是一个用于Web应用程序的自动化测试工具,它有以下特点:

  1. 开源免费;
  2. 支持主流浏览器:Chrome、Firefox、Safari等;
  3. 跨平台:Windows、Linux、Mac;
  4. 多语言:Python、Java、Ruby、Php、Js;
  5. 对Web支持良好,有丰富简单的API
2、Python下安装Selenium
sudo pip install selenium    # Python2

sudo pip3 install selenium    # Python3

Selenium操作流程

  1. 打开浏览器
  2. 打开网页
  3. 元素定位及交互操作
  4. 关闭浏览器
1、打开浏览器

创建浏览器对象

from selenium import webdriver

browser=webdriver.Chrome()    # 创建一个浏览器对象
# browser = webdriver.Firefox()
# browser = webdriver.Safari()
# browser = webdriver.Edge()

关于谷歌浏览器webdriver的配置(点我)
关于Chrome用于爬虫的配置(点我)

2、打开网页

打开百度首页

browser.get('www.baidu.com')

网页前进和后退

browser.forward()

browser.back()

判断访问是否有效

# 获取当前URL
browser.current_url

# 获取网页标题
browser.title
3、元素定位(核心操作)

定位当前源代码的元素,函数返回该元素对象

元素名称 webdriver API 说明
id find_element_by_id()
name find_element_by_name()
class name find_element_by_class_name()
tag name find_element_by_tag_name()
link text find_element_by_link_text()
partial link text find_element_by_partial_link_text()
xpath find_element_by_xpath()
css selector find_element_by_css_selector()

id / name /class

# 实例:<input id="kw" name="wd" class="s_ipt" value="">

link text

# 示例:<a href="admin.php?m=user&amp;a=ls">用户总数</a>

ele = browser.find_element_by_link_text(‘用户总数’)

partial link text (模糊查找)

# 示例:<a href="admin.php?m=user&amp;a=ls">用户总数</a>

ele = browser.find_element_by_partial_link_text(‘总数’)

css selector

# 方法1
Chrome:右键,检查,Copy selector
Firefox:借助 firebug 等浏览器插件工具,右键检查元素,复制 CSS 路径即可
# 方法2
示例:<a href="javascript:;" data-toggle="modal" data-target="#loginModal">购买课程</a>

browser.find_element_by_css_selector(r'a[href="javascript:;"]')
# r‘tag_name[key=“value”]’
4、元素交互操作

由元素定位后返回的元素对象进行调用(不是浏览器对象)

函数 作用
click() 左击
context_click() 右击
double_click() 双击
send_keys() 模拟按键输入
clear() 清空元素内容(如输入框)
submit() 提交表单
drag_and_drop(source, target) 拖拽鼠标
move_to_element() 鼠标移动到一个元素上
click_and_hold() 左击一个元素

有的网页需要将鼠标放到某个位置才显示具体内容(如导航),
在这里插入图片描述
鼠标放到Java上
这种情况下,直接定位网页元素是没用的。这时候,需要用到动作链(Action Chains)

from selenium.webdriver import ActionChains

actions = ActionChains(browser)    # 创建动作链对象

actions.something_code_here()    # 一些操作

actions.perform()    # 执行
5、查看元素属性
ele.get_attribute('KEY')    # 返回元素(标签)的属性

ele.text    # 返回文本值

ele.id    # 返回元素id

ele.size    # 返回元素大小
6、浏览器等待

强制等待(不智能)

import time

time.sleep(秒数) 

隐式等待(宏定义)

# 执行该语句后,browser再执行其他语句,无论有没有结果,都将等待 6 秒,再返回结果

browser.implicitly_wait(6)

显示等待:条件满足后停止等待,如果条件一直没满足,则超时后停止等待,转而执行其他语句

from selenium.webdriver.support.ui import WebDriverWait

wait = WebDriverWait(browser, 10)    # 创建等待对象,10为超时时间

wait.until(funct)    # 传入函数(等待条件)作为参数

# wait.until_not(funct)
7、浏览器窗口管理

查看窗口

browser.window_handles    # 列出所有句柄

browser.current_window_handle

切换窗口

browser.switch_to_window()

关闭窗口

browser.close()
8、Alert对话框的处理
方法 作用
switch_to_alert() 切换到alter
accept() 确认
dismiss() 取消
send_keys() 有输入框才能使用,否则报错
9、关闭浏览器
browser.quit()

异常归档

1、NoSuchElementException异常

元素的id或name明明存在,但通过find_element_by_id()等函数查找时,报NoSuchElementException异常,解决方案
如果 iframe 有 name 或 id 的话

switch_to_frame("name/id") 

猜你喜欢

转载自blog.csdn.net/weixin_37641832/article/details/83150834