b = webdriver.chrom()
b.get('www,baidu.com')
判断是否是百度首页:1,baidu in b.current_url
2,baidu in b.title
2.元素定位:
ele=find_element_by_id('kw'),
操作:clear,send_keys,
ele.clear(), ele.send_keys('hah')
b.back退回
class_name就是class
by_tagname就是这行的首个标签,如s_ipt的tag——name是input这一行,平行的这行,不是上面
第4课:
元素定位
b = webdriver.chrom()
b.maximize_windows()最大化
ele=b.find_element_by_link_text("企业") --全部文字
ele=b.find_element_by_partial_link_text("企") --部分文字
css语法:
ele=b.find_element_by_css_selector('input[class=''s_ipt'']) ---也是在同一个水平线上
5课
xpath定位:xml路径语言--一级一级查找--绝对路径
b.find_element_xpath('/htlm/body/form/input')
b.find_element_xpath('/htlm/body/form/input[2]')---可以通过下标来找第几个--下标是从1开始
b.get_attribut('type') --可以打印type的值
6课
找所有的input
ele=b.find_element_by_xpath('//input[2]') ---可以通过下标决定找第几个,从1开始,不弄下标就是代表全部--这是同级的,同级的
也可以根据路径加xpath一起:
b.find_element_by_xpath('//form//input[2]') --form是input的上一个标签,再通过attribute获取值
2.找父节点
ele=b.find_element_by_xpath('//form//input/..') --通过..找父节点,--//是绝对路径遍地整个文档
ele.tag_name --获取父节点的值为form
3,查找个数
ele=b.find_element_by_xpath('//*[count(input)=2]')
7课:
ele=b.find_element_by_xpath('//*[count(input)=2]/..') --查找父节点--ele.tag_name
ele=b.find_element_by_xpath('//*[=local-name()="input"]/') --然后可以attribute获得相应值
ele=b.find_element_by_xpath('//*[starts-with(local-name),"i"]') --找出所有以i开头的--ele.tag_name
ele=b.find_element_by_xpath('//*[contain(local-name),"i"]') --找出包含i的元素
ele=b.find_element_by_xpath('//form//*[contain(local-name),"i"]') --form下的i元素
ele=b.find_element_by_xpath('//form//*[contain(local-name),"i")][last()]') --form下的i元素的最后一个元素
ele=b.find_element_by_xpath('//form//*[contain(local-name),"i")][last()-1]') --form下的i元素的倒数第二个
ele=b.find_element_by_xpath('//*[string-length(local-name()=5]') --查找元素长度为5的元素
//xxx|//yyy --多个路径查找
8课-鼠标事件
from selenium import webddriver
b = webdriver.chrom()
b.get('www.baidu.com')
context_click 右击事件
double_click双击事件
drag_and_drop拖动
move_to_element()鼠标停在一个元素上
click_and_hold按下鼠标左键在一个元素上
1,先导入这个模块:
from selenium.webdriver.common.action_chains import ActionChains --引包
ele = driver.find_element_by_link_text("企业直通班")
ActionChains(driver).move_to_element(ele).perform()--ActionChains(driver)用于生成模拟用户行为,--perform()执行存储行为
sub_ele=driver.find_element_by_link_text("软件测试")
sub_ele.click
键盘事件:先引包 from selenium.webdriver.commom.keys import Keys
send_keys(Keys.BACK_SPACE)退格键
send_keys((Keys.CONTRL,'a')全选
send_keys((Keys.CONTRL,'v')黏贴
send_keys((Keys.CONTRL,'c)复制
send_keys((Keys.CONTRL,'x')剪切
send_keys((Keys,ENTER)回车
eg:
b.send_keys("python")
b.send_keys(Keys.BACK_SPACE) --这样上面的python就少来个‘n’
b.send_keys((Keys.CONTRL,'c) --就把pytho复制下来了
查找页面有没有这个字段 --输入python搜索,页面出现python开发字段
b.seng_keys(python)
ele=b.find_element_by_link_text("python 开发")
9课 对话框和登陆
1,对话框去掉可以用xpath直接复制路径,登陆框可以直接用link_text
2,登陆:
account='maizi_tast@139.com'
pwd='abc123456'
ac_ele = b.find_element_by_id("id_account_1")
ac_ele.send_keys(account)
ac_ele = b.find_element_by_id("id_password_1")
ac_ele.send_keys(pwd)
b.find_element_by_id("login_btn").click()
try:
e_erro=b.find_element_by_link_text("该账号格式不正确")
print("错啦")
10课--多窗口切换
b.get('http://www.baidu.com') --打开百度
b.find_element_by_id("kw").send_keys("麦子学院") --百度输入框id
b.find_element_by_id("su").click()--百度的百度一下id
b.find_element_by_link_text("专业it职业教育平台").click() ---很多搜索结果-指定结果文字含专业it职业教育平台的点击---这一就有两个窗口来
b.window_handles ---查看有几个句柄--类似有几个窗口,打印的是内存地址
b.switch_to_window(b.window_handles[1]) --切换到第一个窗口,
b.current_url ---可以查看当前url,看是否切换到第一个窗口
b.current_window_handle ---查看当前文件句柄的内存地址
b.close() --关闭
b.quit()--退出
11课--测试脚本中加等待的方法
1,time的sleep方法
2,implicitly_wait() --设置webdriver的等待时间 --针对所有的
2,WebDriverWait --等待条件满足或者超时后退出--from selenium.webdriver.support.ui import WebDriverWait ---引包 ---针对一个操作-每隔几秒去查找
eg:第一种 b.find_element_by_id("kw").send_keys("麦子学院")
b.implicity_wait(5)
b.find_element_by_id("kw1") --查找不存在的元素,5秒后退出
第二种:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
url="http://www.maiziedu.com"
login_text = "登陆"
account ="maizi_test@139.com"
pwd = "abc123456"
def get_ele_time(driver,time,func): ---设置等待的时间,知道啥时候
return WebDriverWait(driver,time).until(func)
def login_test():
d = webdriver.Chrome()
d.get(url)
d.maximize_window()
ele_login = get_ele_time(d,10,lambda d: d.find_element_by_link_text(login_test)
ele_login.click()
account_ele = d.find_element_by_id('id_account_1')
account_ele.send_keys('')
account_ele.clear()
account_ele.send_keys(account)
pwd_ele = d.find_element_by_id('id_password_1')
pwd_ele.clear()
pwd_ele.send_keys(pwd)
d.find_element_by_id("login_btn").click()
try:
d.find_element_by_link_text("该账号格式不正确")
print('错啦')
except:
print("正确")
d.quit()
if _name_ == '_main_':
login_test() #运行这个主函数
12课alter对话框处理 --如警告框,确认框,无法通过元素定位
switch_to_alert()--切到alter--返回alter对象
accept 确认
dismiss 取消
send_keys()有输入框才能使用,否则报错
eg:
b.find_element_by_id("alter").click() --出现一个提示框
alter=d.switch_to_alter() -- 切换到alter框
type(c) --查看类型
alter.text --对话框中显示的文字
alter.accept() --提示框就确认啦
13,测试用例设计 --分模块--简单分为5个模块
1,openbrowser
2,openurl
3,findelement
4,sendkeys
5,chechresult
14课,测试用例模块化
def openbrows()
return webdriver_handle --打开一个句柄
ebdriver_handle = webdriver.chrom() --返回一个打开的文件句柄
handle.get(url) = d.get(url)
2, if text_id in arg: --text_id这个元素是否在arg这个字典中,如果有执行下一步
ele_login = get_ele_time(d,10,lambda d: d.find_element_by_link_text(arg['text_id'])
ele_login.click()
数据设计--字典形式
key val
url 代开地址
text_id 登陆元素
userid/pwdid/loginid 输入账号元素
uname/pwd 输入账号信息
erroid 检查错误信息
16课:测试用例从文件中导入数据
1,文件txt格式:
文件内容:
url=http://www.maiziedu.com/
text_id=登陆
userid=id_account
pwdid=id_password_1
loginid=login_btn
errorid=该账号格式不正确
2,读取文件还有一种,不只是open,可以导入模块codes
import codes
config = codes.open(path,'r','utf-8')
17课:测试用例错误处理
1,账号不能为空,密码不能为空,账号格式不正确,账号或密码错误,请重新输入--将错误元素信息添加到数据文件,再修改代码支持错误处理
18课--测试结果保存到文件--先用exe
增加日志接口:loginfo
_init_(self,path="",mode="w"):打开日志文件
log_write(self,msg):写日志
log_closw(self):关闭日志文件
19课:多个账号登陆
1,登陆成功要走注销流程才能下个账号登陆,先在info.text里增加logout信息,方便调用
再定义函数
def logout():
d.find_element_by_id('usermenu')
d.find_element_by_id('logout') .click --这样就注销了
20,使用xlrd读取用户数据---excel
有两个模块支持excel的读写
xlrd:读取excel文件数据
xlsxwrite:写excel文件
安装xlrd和xlsxwrite
pip install xlrd
pip install XLsxWriter
方法:
xl=xlrd.open_workbook("test.xls"): --打开excel文件
table=xl.sheet()[0]:通过索引获取工作表---获取第一个表
row=table.row_values(0):获取第一行内容
col=table.col_values(0):获取第一列整列内容
table.nrwos:行数
table.ncols:列数
table.cell(0,0).value:单元格值---一个值如:uname
excel里面如果有数字,则读取时候会默认为浮点型,所以要转化
2,excel表格单元类型
0-空,1-str, 2-mum,3-data,4-boolean,5-error
21,excel生成测试报表---xlsxwriter
作用:1,写入,合并单元格,设置单元格格式
2,支持公式,超链接
3,支持插入图片
4,支持生成chart
用法:
1,创建excel :xl=xlsxwriter.Workbook(test.xls);---传路径
2,添加sheet: table=xl.add_worksheet('sheet1')
3,写单元格:table.write_string(0,0,'first')---另外一种方法('A1','first')
4,设置单元格大小: table.set_columm('A:B',15); ---A到B的宽度为15,a,b两个列框
5,关闭excel: xl.close();
xlsxwriter单元格式:add_format
方法:
color:red 颜色
num_format:yy-mm-dd日期格式
url:www.baidu.com超链接
bold:true加粗
font_size:12字体设置
underline:true下划线设置
bg_color:red单元格颜色