web自动化测试工具--python下的selenium(一)

web自动化测试工具–python下的selenium

python安装

1、pip install selenium
2、安装对应浏览器插件xx driver 网上有相关资源,.exe文件,点击安装就可

selenium使用流程

基础步骤为:导包->创建对应浏览器实例->发起请求->定位元素->进行操作->结束退出

from selenium import webdriver
url='https://www.baidu.com/'
browser=webdriver.Chrome()#创建chrome实例
browser.get(url)#以浏览器形式访问url
kw=browser.find_element_by_id('kw')#定位元素
kw.send_keys('咸鱼')#像文本框输入'咸鱼'
browser.quit()#完全退出

所有应用都基于上述流程,其中的关键是定位和操作

定位

基础–元素定位

#browser为上定义实例
#基础为.find_element_by_xx()
#该语句下只会捕捉第一个满足条件的元素,切记返回值是元素

id与name定位

browser.find_element_by_id('kw')
browser.find_element_by_name('wd')

tag name与class name定位

browser.find_element_by_tag_name('input')
browser.find_element_by_class_name('mnav')

css与xpath定位

因为返回值是元素,所以对应的text(),@attr,::text(),::attr()都不可以用。

browser.find_element_by_css_selector('#kw)
browser.find_element_by_xpath('//span[@class="title-content-title"]')

link与partial link text定位

link text 定位文字连接
partial link text 以部分文本定位文字连接

browser.find_element_by_link_text('贴吧')
browser.find_element_by_partial_link_text('贴')#注意都是捕捉第一个满足条件的元素

进阶–多样定位

定位一组元素

#同样以browser实例进行
#通式:.find_elements_by_xx()
#所有满足条件的元素,返回值是列表

xx参考基础元素定义

多层框架/窗口下定位

在这里插入图片描述
譬如有时页面呈现出这种形式,页面内嵌套页面,html中连接html 靠iframe标签(浮动帧标记,内嵌网页),frame代表整个网页框架。
上图中frame框架的id=f1,inner框架的id=f2
window和frame的使用方法相同

#.switch_to.frame('framename')#官方建议
#framenmae 可以是id名也可以是name名
browser.switch_to.frame('f1')
browser.switch_to.frame('f2')
browser.find_element_by_id('kw')#定位baidu页面上的输入框
#当iframe元素没有id和那么时,先定位iframe元素,再切换
iframe=browser.find_element_by_tag_name('iframe')
browser.switch_to.frame(iframe)#切换,再定位需求元素
browser.switch_to.default_content()#释放,返回主页面

层级定位

相似于xpath的形式,先定父元素再定子元素

简单操作

father=brower.find_element_by_id('s-top-left')
son=father.find_element_by_tag_name('a')

进阶操作

#下拉框,问题在于未操作前不显示
#思路:模拟操作让内容可见,再定位,操作

#点击百度搜索页面下的设置-搜索设置
browser.find_element_by_xpath('//span[@name="tj_settingicon"]').click()#显示
WebDriverWait(browser,10).until(lambda ther:ther.find_element_by_id(''s-user-setting-menu'').is_displayed())#如果下拉框显示,则向后执行,否则每隔0.5s观察一次页面,持续10s
browser.find_element_by_link_text('搜索设置').click()#进入搜索设置页
time.sleep(1)
browser.find_element_by_link_text('保存设置').click()#保存设置
time.sleep(1)
browser.switch_to.alert.accept()#一个小知识,弹出alert窗口时点击确定
#注:selenium使用时必须控制好等待时间,因为浏览器执行时间远大于程序执行时间,不等待浏览器的变化跟不上程序执行。

操作

分为二种事件:
鼠标事件、键盘事件

鼠标事件

browser.find_element_by_id('kw').send_keys(u'咸鱼')#向文本框输入内容
browser.find_element_by_id('su').click()#submit=左键点击

from selenium.webdriver.common.action_chains import ActionChains
A=ActionChains(browser)

#发送
#除了send_keys外
A.sned_keys_to_element(e,u'咸鱼')#向指定元素e发送键
点击
#点击
#左击click
#右击
A.context_click(e).perform()#.context_click 右击 .perfrom 执行链中的所有行为
#双击
A.double_click(e)#双击左键
#按下左键不松开
A.click_and_hold(e)
#松开左键
A.release(e)
移动
#悬停
ActionChians(browser).move_to_element(e).perform()
#移动鼠标  一般结合page ruler插件使用(可以显示坐标位置)
#使鼠标基于之前的位置移动,在当前位置下如果是按钮可以是使用click()等
#第一次是基于原点的(网页的左上角)
ActionChians(browser).move_to_offset(100,100)#如无必要不建议使用
#基于元素移动鼠标
#移动到距离e元素(10,-10)的位置,元素的左上角为原点
ActionChains(browser).move_to_element_with_offset(e,10,-10)
拖拽
#拖放
#e=元素原位置
#t=元素需要移动的目标位置
A.drag_and_drop(e,t).perform()
A.drag_and_drop_by_offset(e,10,10)#移动e元素到指定位置,基于页面原点

键盘事件

from selenium.webdriver.common.keys import Keys
方案1 使用ActionChians类
A.key_down(value,element=None)#按下键盘上某个键,value=键,element=元素
key_up(value,element=None)#松开键盘上某个键

#组合键
A.key_down(Keys.CONTRL).send_keys('c').key_up(Keys.CONTRL)#按下ctrl+c,后松开
方案2
browser.find_element_by_id('xx').send_keys(Keys.ENTER)#定位xx敲击回车

#组合键
browser.find_element_by_id('xx').send_keys(Keys.CONTRL,'c')#定位xx,按下ctrl+c

特殊事件

xx=browser.find_element_by_id('xx')
xx.clear()#清空文本框
xx.get_attribute('xxx')#获取xx元素的xxx属性
#get_attribute的特殊用法 get_property相近
#'textContent'--返回元素的文本
#'innerHTML'--返回选中元素内的全部HTNL
#'outerHTML'--返回包含选中元素的全部HTML

xx.size#元素大小
xx.text#元素文本
xx.is_displayed()#元素是否可见
xx.is_enabled()#元素是否已使用,某些情况下按键在当前不可用
xx.is_selected()#元素是否选中状态

xx.screenshot(filename)#网页截图,并保存到指定位置
xx.value_of_css_property()#获取元素的css属性
xx.submit()#提交表单
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值