python+selenium web自动化测试基础知识(一)

浏览器常用方法

设置浏览器驱动

// 导包
from selenium import webdriver

//Chrome浏览器
driver = webdriver.Chrome()
//Firefox浏览器
driver = webdriver.Firefox()
//Ie浏览器
driver = webdriver.Ie()

最大化浏览器

//最大化浏览器
driver.maximize_window()

打开url

// 打开百度
driver.get("https://www.baidu.com/")

设置浏览器窗口大小(了解即可)

// 设置浏览器窗口大小:宽1500、高800(像素点)
driver.set_window_size(1500, 800)

设置浏览器窗口位置(了解即可)

// 设置浏览器窗口位置:x=500,y=300
driver.set_window_position(500, 300)

浏览器前进按钮

// 调用浏览器前进按钮
driver.forward()

浏览器后退按钮

// 调用浏览器后退按钮
driver.back()

浏览器刷新按钮

// 调用浏览器刷新按钮
driver.refresh()

获取页面title(网站页签内容)

// 获取title
driver.title

获取当前页面url

// 获取url
driver.current_url

关闭当前主窗口(了解即可)

// 关闭当前主窗口
driver.close()

关闭所有驱动对象启动的窗口

// 关闭所有驱动对象启动的窗口
driver.quit()

元素等待

隐式等待

// 全局元素等待最大时长为30秒
driver.implicitly_wait(30)

显示等待

// 导包
from selenium.webdriver.support.wait import WebDriverWait

//driver:浏览器驱动对象
//timeout:等待最大时长,单位:秒
//poll_frequency:检测间隔时间,如果不写参数,则默认为0.5秒
//find_element_by_xpath("//*[@id='kw']"):使用xpath定位方式
//其他参数不需要修改,照搬就行
WebDriverWait(driver,
              timeout=30,
              poll_frequency=0.6).until(lambda x: x.find_element_by_xpath("//*[@id='kw']"))

显示等待与隐式等待的区别

1.隐式等待针对全局元素有效
2.显示等待针对单个元素有效

元素定位

id定位

//基于元素属性定位
//driver.find_element_by_id('定位元素')
driver.find_element_by_id('kw')

name定位

//基于元素属性定位
//driver.find_element_by_name('定位元素')
driver.find_element_by_name('wd')

class_name定位

//基于元素属性定位
//driver.find_element_by_class_name('定位元素')
driver.find_element_by_class_name('s_ipt')

tag_name定位(了解即可)

//基于标签名称来定位:如input标签。
//注意:如果页面中存在多个相同的标签,默认返回第一个标签元素。
//案例:百度新闻("http://news.baidu.com/")定位输入框,也就是第一个input标签,输入"新闻"
//driver.find_element_by_tag_name('定位元素')
driver.find_element_by_tag_name('input').sendkes("新闻")

link_text定位

//定位超链接标签
//driver.find_element_by_link_text('定位元素')
//注意:只能用于文本内容精准匹配(例如:a标签的全部文本内容)
driver.find_element_by_link_text('新闻')

partial_link_text定位

//定位超链接标签
//driver.find_element_by_partial_link_text('定位元素')
//注意:可以用于精准或模糊匹配,如果使用模糊匹配最好能使用可以唯一关键字;如果有多个值,默认返回第一个值。
driver.find_element_by_partial_link_text('新闻')

xpath定位(重点)

在xpath中属性必须使用@修饰

//driver.find_element_by_xpath("定位元素")
//元素属性为XXX:driver.find_element_by_xpath("//*[@属性='XXX']")
//元素属性1为XXX,属性2为YYY:driver.find_element_by_xpath("//*[@属性1='XXX' and @属性2='YYY']]")
driver.find_element_by_xpath("//*[@id='kw']")
driver.find_element_by_xpath("//*[@id='kw' and @name='ww']")

//元素属性中包含XXX:driver.find_element_by_xpath("//*[contains(@属性,'XXX')]")
driver.find_element_by_xpath("//*[contains(@id,'ww')]")

//text中包含XXX:driver.find_element_by_xpath("//div[contains(text(),'XXX')]")
driver.find_element_by_xpath("//div[contains(text(),'新闻')]")

text中包含XXX的第7个元素:driver.find_element_by_xpath("(//div[contains(text(),'XXX')])[7]")
driver.find_element_by_xpath("(//div[contains(text(),'新闻')])[7]")

//同级哥哥元素:driver.find_element_by_xpath("//div[@class='value']/preceding-sibling::标签名")
driver.find_element_by_xpath("//div[@class='value']/preceding-sibling::input")

//同级弟弟元素:driver.find_element_by_xpath("//div[@class='value']/following-sibling::标签名")
driver.find_element_by_xpath("//div[@class='value']/following-sibling::input")

//元素属性以XXX开头的元素:driver.find_element_by_xpath("//*[starts-with(@属性,'XXX')]")
driver.find_element_by_xpath("//*[starts-with(@name,'k')]")

//元素属性以XXX结尾的元素:driver.find_element_by_xpath("//*[ends-with(@属性,'XXX')]")
driver.find_element_by_xpath("//*[ends-with(@name,'w')]")

//文本内容是XXX的元素:driver.find_element_by_xpath("//a[text()="XXX"]")
//注意:一般适合p标签和a标签
driver.find_element_by_xpath("//a[text()="新闻"]")

路径

绝对路径:以单斜杠(/)开头
相对路径:以双斜杠(//)开头,双斜杠后一定要跟标签或*

路径结合层级

以双斜杠开头使用单斜杠区分子集

driver.find_element_by_xpath("//*[@id='value']/input")
driver.find_element_by_xpath("//div[@id='value']/input")

注意:要灵活使用路径结合xpath、层级来进行定位,将会无往而不利!

css定位

//id选择器:#后面跟id属性的value值(页面中只有一个id属性的值为kw)
driver.find_element_by_css_selector('#kw').send_keys("python")
//如果页面中有多个id属性的值为kw,我需要定位第七个元素
element = driver.find_elements_by_css_selector('#kw')
element[7].send_keys("python")

//class选择器:.后面跟class属性的value值(页面中只有一个class属性的值为.s_ipt)
driver.find_element_by_css_selector('.s_ipt').send_keys("python")
//如果页面中有多个class属性的值为.s_ipt,我需要定位第七个元素
element = driver.find_elements_by_css_selector('.s_ipt')
element[7].send_keys("python")

//元素选择器:元素标签,如:input标签
//如果页面中只有一个input标签
driver.find_element_by_css_selector('input').send_keys("python")
//如果页面中有多个input标签,我需要定位第七个input
element = driver.find_elements_by_css_selector('input')
element[7].send_keys("python")

//元素的属性选择器:如该元素的id属性为kw(页面中只有该元素的id属性为kw)
driver.find_element_by_css_selector('[id="kw"]').send_keys("python")
//如果页面中id属性为kw的元素有多个,我需要定位第七个元素
element = driver.find_elements_by_css_selector('[id="kw"]')
element[7].send_keys("python")
//该元素的id属性为kw,name为wd
driver.find_element_by_css_selector('[id="kw"][name="wd"]').send_keys("python")

//层级选择器:大于号(>)和空格( )
//区别:>必须为子集,空格只要是下属就可以
//例如:input标签为p标签的子集
driver.find_element_by_css_selector('p>input').send_keys("python")
//例如:input标签为p标签的下属
driver.find_element_by_css_selector('p input').send_keys("python")

//元素属性值模糊匹配
//input标签的id属性以k字母开头的元素
driver.find_element_by_css_selector('input[id^="k"]').send_keys("python")
//input标签的id属性以w字母结尾的元素
driver.find_element_by_css_selector('input[id$="w"]').send_keys("python")
//input标签的id属性包含k字母的元素
driver.find_element_by_css_selector('input[id*="k"]').send_keys("python")

//组合
//层级+元素+id+class选择器
driver.find_element_by_css_selector('span>input#kw.s_ipt').send_keys("python")

//层级+元素+id+class+属性选择器
driver.find_element_by_css_selector('span>input#kw.s_ipt[name="wd"]').send_keys("python")

注意:要灵活使用css定位!!!

元素操作方法

send_keys()

//发送文本内容(输入内容):send_keys("输入内容")
driver.find_element_by_xpath("//div[@id='value']/input").send_keys("输入内容")

//上传文件:send_keys("文件路径及文件名")
//只适用于input标签
driver.find_element_by_xpath('//input[@id="file"]').send_keys("E://demo.docx")

//键盘按键及快捷键会在下方介绍

点击操作-click()

//点击操作(模拟鼠标左击)
driver.find_element_by_xpath("//button[@id='value']").click()

清空操作-clear

//清空文本框
driver.find_element_by_xpath("//div[@id='value']/input").clear

获取元素大小-size(了解即可)

//获取元素大小(宽、高)
size = driver.find_element_by_xpath('//input[@value="百度一下"]').size
print(size)

获取文本-text

//获取元素的文本信息
text = driver.find_element_by_xpath('//p[@class="login-error"]').text
print(text)

获取元素的某个属性的值-get_attribute()(了解即可)

//获取元素的某个属性的值
value = driver.find_element_by_xpath('//input[@value="百度一下"]').get_attribute("type")
print(value)

元素是否显示-is_displayed()

//判断该元素是否显示
//意思就是,html代码里面有这个元素,有的元素不在该页面上显示
//例如:百度首页的登录,点击后进入扫码登录,点击用户名登录,跳转到用户名密码登录页面,
//用户名登录按钮消失,但实际上这个元素还在html中,只是在用户名密码登录页面中不显示而已
displayed = driver.find_element_by_xpath('//p[@title="用户名登录"]').is_displayed()
print(displayed)

元素是否可用-is_enabled()

//判断元素是否可用
//例如:是否可点击,是否可编辑等等
enabled = driver.find_element_by_xpath('//input[@value="百度一下"]').is_enabled()
print(enabled)

元素是否选中-is_selected()

//判断元素是否被选中
//例如:多选框,判断该选项是否被选中;注册页面,判断用户协议前面的小方框是否被选中
selected = driver.find_element_by_xpath('//input[@type="checkbox"]').is_selected()
print(selected)

鼠标操作

右击-context_click()

//导包
from selenium.webdriver import ActionChains

//实例化ActionChains()类
action = ActionChains(driver)
//鼠标右击:action.context_click(定位元素)
//perform():执行所有 ActionChains 中存储的行为,可以理解为是对整个操作的提交动作。
action.context_click(driver.find_element_by_xpath('//input[@id="kw"]')).perform()

//扩展:右击-->粘贴(注意:此方法只适合火狐和IE,谷歌不支持)
//选中元素点击右键,选择右键菜单选项(例如粘贴(p))
action.context_click(定位的元素).send_keys('p')

双击-double_click()

//导包
from selenium.webdriver import ActionChains

//实例化ActionChains()类
action = ActionChains(driver)
//定位元素
element = driver.find_element_by_xpath('//span[contains(text(),"换一换")]')
//双击
action.double_click(element).perform()

拖拽-drag_and_drop()

//导包
from selenium.webdriver import ActionChains

//实例化ActionChains()类
action = ActionChains(driver)
//源元素定位
start_element = driver.find_element_by_xpath('//div[contains(text(),"百度热榜")]')
//目标元素定位
end_element = driver.find_element_by_xpath('//input[@id="kw"]')
//把源元素拖拽到目标元素
action.drag_and_drop(start_element, end_element).perform()

拖拽(坐标偏移量)-drag_and_drop_by_offset()

//导包
from selenium.webdriver import ActionChains

//实例化ActionChains()类
action = ActionChains(driver)
//源元素定位
start_element = driver.find_element_by_xpath('//div[contains(text(),"百度热榜")]')
//X坐标:X坐标为正数向右偏移,X坐标为负数向左偏移
X = 200
//Y坐标:Y坐标为正数向下偏移,Y坐标为负数向上偏移
Y = 500
//把源元素向右拖拽200,向下拖拽500
action.drag_and_drop_by_offset(start_element, X, Y).perform()

悬停-action.move_to_element()

//导包
from selenium.webdriver import ActionChains

//实例化ActionChains()类
action = ActionChains(driver)
//源元素定位
element = driver.find_element_by_xpath('//span[contains(text(),"设置")]')
action.move_to_element(element).perform()

注意:调用以上鼠标操作方法最后必须调用perform()!!!

键盘操作

单键

//导包
from selenium.webdriver.common.keys import Keys

//定位元素
element = driver.find_element_by_xpath('//input[@id="kw"]')
//输入python
element.send_keys("python")
//调用BACKSPACE键(键盘=号右边的那个键)
element.send_keys(Keys.BACKSPACE)
//输出结果为pytho

组合键

//导包
from selenium.webdriver.common.keys import Keys

//定位元素
element = driver.find_element_by_xpath('//input[@id="kw"]')
//输入python
element.send_keys("python")
//双键组合:调用CONTROL+a键(ctrl+a键,全选)
element.send_keys(Keys.CONTROL, 'a')
//输出结果为选中python

//三键组合:ctrl+shift+i
element.send_keys(Keys.CONTROL, Keys.SHIFT, 'i')

本次分享就到这里啦!喜欢的朋友点个关注!非常感谢!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值