from selenium import webdriver # 导入webdrive模块
import time # 导入时间模块
from selenium.webdriver.common.action_chains import ActionChains
import re
import selenium.webdriver.support.ui as ui # 导入一个等待模块
# web自动化:(selenium)
# selenium:开源的自动化测试工具集(14年被开发出来)
# 主要是用于web应用程序的自动化测试,项目周期短的,需求多变的项目不适用
# 特点:1.开源,免费
# 2.多浏览器支持
# 3.多语言支持(python,java,c#都有)
# 4.多平台支持(Linux,Windows,mac等)
# 版本:1.0,2.0
# 2.0里面包括四个工具(1.0只有前三个工具)
# selenium IDE:(只支持)火狐浏览器的插件,主要功能:录制和回放 可以快速的还原BUG
# selenium Gird:自动化测试的辅助工具;主要作用:可以将测试在不同的环境下并行执行
# selenium Rc:是selenium1.0的核心,主要作用:支持不同的语言编写的自动化测试脚本,负责控制浏览器的行为
# Webdriver:针对不同的浏览器而开发出来的,主要作用:取代了RC在selenium中的地位,负责直接控制浏览器(RC不再使用)
# selenium Rc:通过控制浏览器中的Javascript,来间接控制浏览器
# webdrive:单独的程序,集成了各个浏览器的原生接口(一些函数),通过接口来直接控制浏览器
# 不同浏览器有不同的webdriver,不同版本也有不同的webdrive,放在python的第一级目录下,解压即可
# 获取网页标题
print(dr.title)
# 获取当前页面的url
print(dr.current_url)
# 页面的前进和后退
time.sleep(2)
dr.get('https://www.jd.com')
time.sleep(2)
dr.back() # 返回到上一个请求的页面
time.sleep(2)
dr.forward() # 前进
# 设置窗口的大小
time.sleep(2)
dr.set_window_size(200,200) # 第一个数字为宽,第二个数字为高
# 设置窗口的位置
time.sleep(2)
dr.set_window_position(300,300) # 第一个是x轴,第二个是y轴
# 将窗口最大化
time.sleep(2)
dr.maximize_window()
# 将窗口最小化
time.sleep(2)
dr.minimize_window()
# 操纵浏览器打开网址
# 获取网页标题 webdrive模块间接控制webdrive.exe
# selenium 核心 web应用程序自动化
# 代替人的行为对页面进行点击,输入,下拉等操作
# 系统测试,自动化测试通常用于回归测试
# 定位(核心)
# 简单定位方式:1.通过ID属性定位 2.通过class_name属性定位 3.使用name属性定位
# 4.tag_name标签名称定位(通常用来定位一组元素)
# 5.xpath路径定位 6.css路径定位 7.link_text文本定位
# xpath是xml路径语言 即通过路径定位
# 分为绝对路径(/html开头)和相对路径(//开头)
# xml是可扩展性标记语言 功能:用来存储数据 内容和html内容完全一样
# 网页源代码中,跟箭头挨着的叫标签,两个箭头之间,标签后面的键值对叫做属性
# 属性只有叫ID的属性的值是唯一的 其他的都不是唯一的
# dr = webdriver.Firefox() # 打开浏览器
#
# dr.get('http://www.ctrip.com/') # 发送请求
# 定位一个元素用element,不带s
# send_keys,向定位到的元素中输入
# click,点击选中的元素
# clear,清除选中的元素
# 通过ID属性定位 通过ID的值来查找元素
# dr.find_element_by_id('kw').send_keys('python')
# 通过class_name定位 通过class属性的值来查找元素 要保证class属性的值是唯一的
# dr.find_element_by_class_name('s_ipt').send_keys('python')
# 点击的动作 click()
# dr.find_element_by_id('su').click()
# 通过name属性定位
# dr.find_element_by_name('wd').send_keys('python')
# 通过xpath路径定位
# dr.find_element_by_xpath('//*[@id="kw"]').send_keys('python')
# 通过css来定位 css:层叠样式表
# dr.find_element_by_css_selector('#kw').send_keys('python')
# link_text 通过文本来定位,文本:两个标签中间的信息
# dr.find_element_by_link_text('新闻').click() # 完全匹配文本
# dr.find_element_by_partial_link_text('123').click() # 模糊匹配文本
# # 定位一组对象 多个 得到的是一个列表 将element变为elements即可
# a = dr.find_elements_by_class_name('mnav')
# for i in a:
# print(a.text)
# 层级定位 当元素不好定位时,先定位父元素,再定位需要的元素
# 若采用层级定位,那么父元素只能是单个元素
# wd = dr.find_element_by_id('searchHotelLevelSelect').find_elements_by_tag_name('option')
# text 获取定位到的元素的文本
# 获取该元素某个属性的值
# i.get_attribute()
# 层级定位
# clear() 清除
# 关闭浏览器
# time.sleep(5)
# dr.quit()
# 移动鼠标位置
# dr = webdriver.Firefox() # 打开浏览器
# dr.get('https://www.jd.com/') # 发送请求
# a = dr.find_element_by_id('J_cate').find_elements_by_class_name('cate_menu_lk')
# for i in a:
# ActionChains(dr).move_to_element(i).perform()
# 弹出框:(alert)
a = dr.switch_to_alert() # 获取弹出框
a.accept() # 点击弹出框上面的确定
a.dismiss() # 点击上面的取消
a.send_keys() # 输入
a.text # 获取弹出框上面的内容
# iFrame:内嵌框架
# dr.switch_to_frame() # 括号内可以输入三种值,1.ID属性的值2.name属性的值3.先定位到此框架,然后切换
# 第三种方法示例如下
# a = dr.find_element_by_xpath() # 定位到该框架
# dr.switch_to_frame(a) # 切换到该框架
# dr.switch_to_default_content() # 退出框架(退出到最开始的框架)
# dr.switch_to.parent_frame() # 退出到父框架
window:窗口 命名唯一的标识 叫句柄:由一串数字组成
dr.current_window_handle 获取当前页面的句柄
dr.window_handles 获取所有窗口的句柄
dr.switch_to_window(句柄) 到指定句柄的窗口
dr = webdriver.Firefox()
dr.get('https://www.douban.com/')
print(dr.current_window_handle)
time.sleep(2)
print(dr.title)
dr.find_element_by_css_selector('.lnk-book').click()
time.sleep(2)
a=dr.window_handles
dr.switch_to_window(a[-1])
print(dr.title)
# 智能等待代码
wait = ui.WebDriveWait(dr,10) # 第二个数字是最大等待时间
wait.until(lambda dr:dr.find_element_by_id('kw').is_displayed()) # 只要出现对应元素,立刻执行下一步
dr = webdriver.Firefox()
dr.get('http://www.jd.com/')
# wait = ui.WebDriverWait(dr,10)
# wait.until(lambda dr:dr.find_element_by_id('kw').is_displayed())
# dr.quit()
# 如何下拉网页
wd = "var q=document.documentElement.scrollTop=10000"
dr.execute_script(wd)
selenium 总结
1.定位 简单定位,定位一组元素,层级定位
2.对定位元素的操作 点击,输入,清除,获取定位到的元素的文本(text)
3.对弹出框的处理:alert,accept确认,dismiss取消,send_keys输入,text获取文本
4.内嵌框架iFrame switch_to_Frame switch_to_default_content() switch_to.Parent_Frame()
5.处理窗口window_handles current_window_handle switch_to_window(句柄)
6.智能等待:wait
7.模拟用户操作:click send_keys,move_to_element
断言:1.页面是否显示
2.后台链中是否有对应规则
3.发送报文测试规则
selenium使用基础知识--web自动化测试
最新推荐文章于 2022-04-14 10:17:18 发布