元素定位
一共有8中定位方式:id、name、class name、tag name、link test、partial link text、xpath、css selector,每种定位方式所对应的方法如下:
| 定位方式 | 具体方法 | 具体方法 |
|---|
| id | find_element_by_id() | | | name | find_element_by_name() | | | class name | find_element_by_class_name() | | | tag name | find_element_by_tag_name() | | | link test | find_element_by_link_text() | | | partial link | text find_element_by_partial_link_text() | | | xpath | find_element_by_xpath() | | | name | find_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 selector | find_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”的所有元素 | | * | * | 选择所有元素 | | element | p | 选择所有<p>元素 | | element,element | div,p | 选择所有<div>和<p> 元素 | | element element | div p | 选择<div>元素内部的所有<p>元素 元素之间用的是空格占位符,表示获取空格左边元素<div>的所有的子元素,孙子元素……中的<p>元素 | | element>element | div>p | 选择父元素为<div>元素的所有<p>元素,“>”只能选取子节点 | | element+element | div+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)
action.方法1
action.方法2
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属性,则可以通过下面的方式进行定位。
xf = driver.find_element_by_xpath('//*[@id="x-URS-iframe"]')
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() 关闭所有窗口
|