selenium的web控件定位与常见操作

元素定位

一共有8中定位方式:id、name、class name、tag name、link test、partial link text、xpath、css selector,每种定位方式所对应的方法如下:

定位方式具体方法具体方法
idfind_element_by_id()
namefind_element_by_name()
class namefind_element_by_class_name()
tag namefind_element_by_tag_name()
link textfind_element_by_link_text()
partial linktext find_element_by_partial_link_text()
xpathfind_element_by_xpath()
namefind_element_by_name()通过xpath定位有多种方法,列出常用的几个:
dr.find_element_by_xpath("//[@id=‘kw’]")
dr.find_element_by_xpath("//
[@name=‘wd’]")
dr.find_element_by_xpath("//input[@class=‘s_ipt’]")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class=‘soutu-btn’]/input")
dr.find_element_by_xpath("//form[@id=‘form’]/span/input")
dr.find_element_by_xpath("//input[@id=‘kw’ and @name=‘wd’]")
css selectorfind_emelent_by_css_selector()通过css selector定位有多种方法,列出常用的几个:
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector(“html > body > form > span > input”)

常用的xpath

一般情况下,表达式“/”表示从根节点选取子节点;"//"表示选取当前节点中的所有元素,包括子节点,孙子节点,重孙节点……;“.”表示选取当前节点;“…”表示选取当前节点的父节点;@表示选取属性。
在这里插入图片描述

常用的css选择器

css selector和xpath一样,都可应用于selenium和appium中,但appium原生控件不支持css selector,只有在webview中才能够适用css selector

选择器示例描述
.class.intro选择class="intro"的所有元素
#id#firstname选择id="firstname”的所有元素
**选择所有元素
elementp选择所有<p>元素
element,elementdiv,p选择所有<div>和<p> 元素
element elementdiv p选择<div>元素内部的所有<p>元素
元素之间用的是空格占位符,表示获取空格左边元素<div>的所有的子元素,孙子元素……中的<p>元素
element>elementdiv>p选择父元素为<div>元素的所有<p>元素,“>”只能选取子节点
element+elementdiv+p选择紧接在<div>元素之后的所有兄弟<p>元素,div与p是同级的
[attribute][target]选择带有target属性的所有元素
[attribute=value][target=_blank]选择target="_blank"的所有元素
[:nth-child(n)]p:nth-child(2)选择属于其父元素的第二个子元素的每个<p>元素
[element1~element2]p~ul选择前面有<p>元素的每个<ul>元素

不管用xpath还是css selector,都可以打开浏览器的开发者工具,在console中调试尝试下,如下
用xpath来调试定位元素的语法:

$x('//*[@id="kw"]')

在这里插入图片描述
用css selector来调试定位元素的语法:

$('#kw')
$('[id=kw]')

在这里插入图片描述

控制浏览器操作

控制浏览器窗口大小

可以通过设置参数来控制浏览器窗口的大小,方法set_window_size(宽度,高度),参数数字为像素点,如:

from selenium import webdriver
		 
driver = webdriver.Firefox()
driver.get("http://m.baidu.com")
# 参数数字为像素点 
print("设置浏览器宽480、高800显示") 
driver.set_window_size(480, 800)
driver.quit()

另外,maximize_window()方法用来控制浏览器窗口以全屏的方式打开,无参数

控制浏览器前进后退

WebDriver提供了的back()和forward()方法来模拟浏览器的后退和前进按钮,如:

from selenium import webdriver 
		
driver = webdriver.Firefox() 
		
#访问百度首页 
first_url= 'http://www.baidu.com' 
print("now access %s" %(first_url)) 
driver.get(first_url) 
		
#访问新闻页面 
second_url='http://news.baidu.com' 
print("now access %s" %(second_url)) 
driver.get(second_url) 
		
#返回(后退)到百度首页 
print("back to %s "%(first_url)) 
driver.back()
		
#前进到新闻页 
print("forward to %s"%(second_url)) 
driver.forward() 
		
driver.quit()

刷新页面

刷新页面的方法:driver.refresh()

webdriver常用方法

方法释义备注
clear()清除文本
send_keys(value)模拟按键输入
click()单击元素
submit()提交有时候 submit()可以与click()方法互换来使用, submit()同样可以提交一个按钮, 但 submit()的应用范围远不及 click()广泛
size()返回元素尺寸
text()获取元素的文本
get_attribute(name)获得属性值
is_displayed()设置该元素是否用户可见
sleep() (Python函数)推迟调用线程的运行使用该函数要先import time,使用时:time.sleep(单位为秒)

鼠标事件

在webdriver中,关于鼠标操作的方法封装在ActionChains类中提供
ActionChains提供的常用方法有:

方法释义
perform()执行所有ActionChains中存储的行为
context_click()右击
Double_click()双击
drag_and_drop()拖动
move_to_element()鼠标悬停

执行原理:调用ActionChains的方法时,不会立即执行,而是将所有的操作按顺序存放在一个队列中,当调用perform()方法时,队列中的事件会依次执行
更多更详细的方法可参考官网:ActionChains官方文档

基本用法

# 生成一个动作 
action ActionChains(driver)
# 动作添加方法1
action.方法1
# 动作添加方法2
action.方法2
# 调用perform()方法执行
action.perform()

# 链式写法
ActionChains(driver).move_to_element(ele).click(ele).perform()

# 分布写法
actions = ActionChains(driver)
actions.move_to_element(ele)
actions.click(ele)
actions.perform()

ActionChains模拟按键

模拟按键有多种方法,可用win32api实现,或SendKeys,或selenium的WebElement对象的send_keys()方法,这里介绍ActionChains的几个方法
用法如下

action = ActionChains(driver)
action.send_keys(Keys.BACK_SPACE)
# 或者:
action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL)
action.perform()

TouchAction鼠标模拟

ActionChains只能对PC端的设备进行模拟操作,对H5端是无效的,但TouchAction都可以,能够实现滑动,拖拽,多点触控,模拟手势等各种操作
手势控制:

方法描述
tap在指定元素上点击
double_tap在指定元素上双击
tap_and_hold在指定元素上点击但不释放
move手势移动指定偏移
release释放手势
scroll手势点击并滚动
scroll_from_element从某个元素位置开始手势点击并滚动(向上滑动为正数,向下滑动为负数
long_press长按元素
flick手势滑动
flick_element从某个元素位置开始手势滑动(向上滑动为负数,向下滑动为正数)
perform执行

定位一组元素

webdriver提供了8种用于定位一组元素的方法:

find_elements_by_id() 
find_elements_by_name() 
find_elements_by_class_name() 
find_elements_by_tag_name() 
find_elements_by_link_text() 
find_elements_by_partial_link_text() 
find_elements_by_xpath() 
find_elements_by_css_selector()

多表单切换

switch_to.frame() 默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。

#先通过xpth定位到iframe
xf = driver.find_element_by_xpath('//*[@id="x-URS-iframe"]')
#再将定位对象传给switch_to.frame()方法
driver.switch_to.frame(xf)
driver.switch_to.parent_frame()

警告框处理

在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作。
• text:返回 alert/confirm/prompt 中的文字信息。
• accept():接受现有警告框。
• dismiss():解散现有警告框。
• send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。

cookie操作

有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试进行的。WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。

WebDriver操作cookie的方法:

get_cookies(): 获得所有cookie信息。
get_cookie(name): 返回字典的key为“name”的cookie信息。
add_cookie(cookie_dict) : 添加cookie。“cookie_dict”指字典对象,必须有name 和value 值。
delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,选项包括“路径”,“域”。
delete_all_cookies(): 删除所有cookie信息

调用JavaScript

虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法。在这种情况下,就可以借助JavaScript来控制浏览器的滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码。
用于调整浏览器滚动条位置的JavaScript代码如下:

window.scrollTo(左边距,上边距); 
window.scrollTo(0,450);
window.scrollTo()方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距

窗口截图

WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口。

关闭浏览器

可以使用quit()方法,其含义为退出相关的驱动程序和关闭所有窗口。除此之外,WebDriver还提供了close()方法,用来关闭当前窗口。
例如多窗口的处理,在用例执行的过程中打开了多个窗口,我们想要关闭其中的某个窗口,这时就要用到close()方法进行关闭了。

close() 关闭单个窗口
quit() 关闭所有窗口
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值