【webdriver自动化】整理API框架(主要是关键字,具体例子在本地)
1、 获取网页源码
pageSource = self.driver.page_source
print pageSource.encode("gbk","ignore")
2、 页面前进后退访问
firstVisitURL = "http://www.sogou.com"
secondVisitURL = "http://www.baidu.com"
# 首先访问sogou首页
self.driver.get(firstVisitURL)
# 然后访问baidu首页
self.driver.get(secondVisitURL)
# 返回上一次访问过的搜狗首页
self.driver.back()
# 再次回到百度首页
self.driver.forward()
3、 强制刷新
Self.driver.refresh()
4、 最大化浏览器窗口
Self.driver.maximize_window()
5、 打印和设置浏览器窗口的横纵坐标
Self.driver.get_window_positon() #返回的是一个字典对象
Print position[“x”]
Print position[“y”]
Self.driver.set_window_position(x=200,y=300)
6、 截屏保存(截得是浏览器)
Self.driver.screen_shot_as_file(r”e:\\text4\\1.png”) 截取整个屏幕
from PIL import ImageGrab
img=ImageGrab.grab()
img.save(“1.jpg”,”jpeg”)
7、 设置超时时间
Self.driver.set_page_load_timeout(4)
8、 获取当前浏览器页面的title值
Title=self.driver.title
或者
assert self.driver.title.find(u“百度一下,你就知道”)>=0,”assert error”
9、 获取当前句柄和切换句柄
获取当前句柄
Now_Handles=self.driver.current_window_handle
获取所有句柄
Handles=self.driver.window_handles
切换句柄
Self.driver.switch_to.window(handle)
10、 获得元素属性信息
Newelement=self.driver.find_element_by_xpath(“//*[text()=”新闻”]”)
Print Newelement.tag_name
Print Newelement.size
11、 断言链接元素是否包含某个文本
aElement = self.driver.find_element_by_xpath("//*[@class='mnav'][1]")
a_text=a.Element.text
self.assertEqual(a_text,u”新闻”) 12、 显示或隐藏某个元素
Print div4.is_displayed()
13、 判断元素是否可操作
Print input2.is_enabled()
14、 获取搜索框的“name”和“value”属性
searchBox = self.driver.find_element_by_id("query")
print searchBox.get_attribute("name")
print searchBox.get_attribute("value”) 15、 获取某个元素的css样式
searchBox = self.driver.find_element_by_id("kw")
print searchBox.value_of_css_property(“height”)
print searchBox.value_of_css_property(“width”)
16、 清空输入框
input = self.driver.find_element_by_id("kw")
input.clear()
17、 向输入框中输入值
input = self.driver.find_element_by_id("kw")
input.send_keys(u"光荣之路自动化测试")
18、 模拟鼠标单击
Button=self.driver.find_element_by_id(“button”)
Button.click()
19、 模拟鼠标双击
inputBox = self.driver.find_element_by_id("inputBox")
#导入支持鼠标双击操作的模块
From selenium import ActionChains
Action_chains=ActionChains(self.driver)
Action_chains.double_click(inputbox).perform()
20、 操作下拉列表
Select=self.driver.find_element_by_name(“fruit”)
All_options=select.find_element_by_tag_name(“option”)
For option in All_options:
option.click() 21、 通过不同方法选中选项
# 导入Select模块
from selenium.webdriver.support.ui import Select
select_element = Select(self.driver.find_element_by_xpath("//select"))
# 方法一:通过序号选择第二个元素,序号从0开始
select_element.select_by_index(1)
# 方法二:通过选项的显示文本选择文本为“猕猴桃”选项
select_element.select_by_visible_text("猕猴桃")
# 方法三:通过选项的value属性值选择value=“shanzha”选项
select_element.select_by_value("shanzha")
22、 List存储内容然后做断言
from selenium.webdriver.support.ui import Select
# 使用xpath定位方式获取select页面元素对象
select_element = Select(self.driver.find_element_by_xpath("//select"))
# 获取所有选择项的页面元素对象
actual_options = select_element.options
# 声明一个list对象,存储下拉列表中所期望出现的文字内容
expect_optionsList = [u"桃子",u"西瓜",u"橘子",u"猕猴桃",u"山楂",u"荔枝"]
# 使用Python内置map()函数获取页面中下拉列表展示的选项内容组成的列表对象
actual_optionsList = map(lambda option: option.text, actual_options)
# 断言期望列表对象和实际列表对象是否完全一致
self.assertListEqual(expect_optionsList, actual_optionsList) 23、 多选项的选中和取消选中
select_element = Select(self.driver.find_element_by_xpath("//select"))
select_element.select_by_index(1)
select_element.select_by_visible_text(“橘子”)
select_element.select_by_value(“juzi”) select_element.deselect_by_index(1)
select_element.deselect_by_visible_text(“橘子”)
select_element.deselect_by_value(“juzi”) for select in select_element.all_selected_options:
24、 联想输入框,输入内容的同时模拟键盘按下箭头键
from selenium.webdriver.common.keys import Keys
# 输入的同时按下箭头键
self.driver.find_element_by_id("select").send_keys("c")
self.driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN)
self.driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN)
self.driver.find_element_by_id("select").send_keys( Keys.ENTER)
25、 单击radio
berryRadio = self.driver.find_element_by_xpath("//input[@value='berry']")
berryRadio.click()
# 断言“草莓”复选框被成功选中
self.assertTrue(berryRadio.is_selected(), u"草莓复选框未被选中!")
26、 取消选中radio
berryCheckBox = self.driver.find_element_by_xpath("//input[@value='berry']")
berryCheckBox.click()
# 断言“草莓”复选框被成功选中
self.assertTrue(berryCheckBox.is_selected(), u"草莓复选框未被选中!")
if berryCheckBox.is_selected():
# 如果“草莓”复选框被成功选中,再次点击取消选中
berryCheckBox.click()
27、 通过断言页面是否存在某些关键字来确定页面按照预期加载
assert u"首页--光荣之路" in self.driver.page_source, u"页面源码中不存在该关键字"
28、 拖拽元素
# 导入提供拖拽元素方法的模块ActionChains
from selenium.webdriver import ActionChains
action_chains = ActionChains(self.driver)
# 将页面上第一个能被拖拽的元素拖拽到第二个元素位置
action_chains.drag_and_drop(initialPosition, targetPosition).perform()
# 将页面上第三个能拖拽的元素,向右下拖动10个像素,共拖动5次
for i in xrange(5): action_chains.drag_and_drop_by_offset(dragElement, 10, 10).perform() 29、 调用键盘事件
# 导入模拟按键模块Keys
from selenium.webdriver.common.keys import Keys
query = self.driver.find_element_by_id("query")
query.send_keys(Keys.F12)
query.send_keys("selenium")
query.send_keys(Keys.ENTER)
30、 模拟鼠标右键 31、 调用系统剪切板模拟键盘组合键(ctrl+v)
例子太长见API整理txt
32、 键盘组合键(ctrl+a,ctrl+x,ctrl+v)
33、 键盘码
VK_CODE = {
'backspace': 0x08,
'tab': 0x09,
'clear': 0x0C,
'enter': 0x0D,
'shift': 0x10,
'ctrl': 0x11,
'alt': 0x12,
'pause': 0x13,
'caps_lock': 0x14,
'esc': 0x1B,
'spacebar': 0x20,
'page_up': 0x21,
'page_down': 0x22,
'end': 0x23,
'home': 0x24,
'left_arrow': 0x25,
'up_arrow': 0x26,
'right_arrow': 0x27,
'down_arrow': 0x28,
'select': 0x29,
'print': 0x2A,
'execute': 0x2B,
'print_screen': 0x2C,
'ins': 0x2D,
'del': 0x2E,
'help': 0x2F,
'': 0x30,
'': 0x31,
'': 0x32,
'': 0x33,
'': 0x34,
'': 0x35,
'': 0x36,
'': 0x37,
'': 0x38,
'': 0x39,
'a': 0x41,
'b': 0x42,
'c': 0x43,
'd': 0x44,
'e': 0x45,
'f': 0x46,
'g': 0x47,
'h': 0x48,
'i': 0x49,
'j': 0x4A,
'k': 0x4B,
'l': 0x4C,
'm': 0x4D,
'n': 0x4E,
'o': 0x4F,
'p': 0x50,
'q': 0x51,
'r': 0x52,
's': 0x53,
't': 0x54,
'u': 0x55,
'v': 0x56,
'w': 0x57,
'x': 0x58,
'y': 0x59,
'z': 0x5A,
'numpad_0': 0x60,
'numpad_1': 0x61,
'numpad_2': 0x62,
'numpad_3': 0x63,
'numpad_4': 0x64,
'numpad_5': 0x65,
'numpad_6': 0x66,
'numpad_7': 0x67,
'numpad_8': 0x68,
'numpad_9': 0x69,
'multiply_key': 0x6A,
'add_key': 0x6B,
'separator_key': 0x6C,
'subtract_key': 0x6D,
'decimal_key': 0x6E,
'divide_key': 0x6F,
'F1': 0x70,
'F2': 0x71,
'F3': 0x72,
'F4': 0x73,
'F5': 0x74,
'F6': 0x75,
'F7': 0x76,
'F8': 0x77,
'F9': 0x78,
'F10': 0x79,
'F11': 0x7A,
'F12': 0x7B,
'F13': 0x7C,
'F14': 0x7D,
'F15': 0x7E,
'F16': 0x7F,
'F17': 0x80,
'F18': 0x81,
'F19': 0x82,
'F20': 0x83,
'F21': 0x84,
'F22': 0x85,
'F23': 0x86,
'F24': 0x87,
'num_lock': 0x90,
'scroll_lock': 0x91,
'left_shift': 0xA0,
'right_shift ': 0xA1,
'left_control': 0xA2,
'right_control': 0xA3,
'left_menu': 0xA4,
'right_menu': 0xA5,
'browser_back': 0xA6,
'browser_forward': 0xA7,
'browser_refresh': 0xA8,
'browser_stop': 0xA9,
'browser_search': 0xAA,
'browser_favorites': 0xAB,
'browser_start_and_home': 0xAC,
'volume_mute': 0xAD,
'volume_Down': 0xAE,
'volume_up': 0xAF,
'next_track': 0xB0,
'previous_track': 0xB1,
'stop_media': 0xB2,
'play/pause_media': 0xB3,
'start_mail': 0xB4,
'select_media': 0xB5,
'start_application_1': 0xB6,
'start_application_2': 0xB7,
'attn_key': 0xF6,
'crsel_key': 0xF7,
'exsel_key': 0xF8,
'play_key': 0xFA,
'zoom_key': 0xFB,
'clear_key': 0xFE,
'+': 0xBB,
',': 0xBC,
'-': 0xBD,
'.': 0xBE,
'/': 0xBF,
'`': 0xC0,
';': 0xBA,
'[': 0xDB,
'\\': 0xDC,
']': 0xDD,
"'": 0xDE,
'`': 0xC0
}
34、 控制鼠标的右键操作
35、 在某一个元素上做悬浮
ActionChains(self.driver).move_to_element(link1).perform()
36、 查找页面中某个元素是否存在
方法:
def isElementPresent(self, by, value):
# 从selenium.common.exceptions模块导入NoSuchElementException异常类
from selenium.common.exceptions import NoSuchElementException
try:
element = self.driver.find_element(by=by, value=value)
except NoSuchElementException, e:
# 打印异常信息
print e
# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
return False
else:
# 没有发生异常,表示在页面中找到了该元素,返回True
return True 调用:
res = self.isElementPresent("id", "query")
if res is True:
print u"所查找的元素存在于页面上!"
else:
print u"页面中未找到所需要的页面元素!"
37、 隐式等待
#隐式等待指第一次找不到的话死等10s,注意这个是全局的;显示等待指每200毫秒尝试一次,找到马上结束,time.sleep()只是单纯的等待
self.driver.implicitly_wait(10)
38、 显式等待
wait = WebDriverWait(self.driver, 10, 0.2)
wait.until(EC.title_is(u"你喜欢的水果")) 39、 刷新页面后元素报错的处理方式
#如果有页面刷新的机制时,一定要重新定位元素,否则会报错
40、 用title定位一个窗口
if self.driver.title == u"搜狗搜索引擎 - 上网从搜狗开始":
self.driver.switch_to.window(all_handles[0])
41、 用源码找到某个窗口
pageSource = self.driver.page_source
if u"搜狗搜索" in pageSource:
42、 Frame间的切换
self.driver.switch_to.frame(XXX)
self.driver.switch_to.default_content()
(1) 通过标签名找到页面中所有的frame元素,然后通过索引进入该frame
self.driver.switch_to.frame(self.driver.find_elements_by_tag_name("frame")[1])
(2) 通过id查找
self.driver.switch_to.frame("rightframe")
self.driver.switch_to.frame(self.driver.find_element_by_id("rightframe"))
(3) 通过索引序号查找
self.driver.switch_to.frame(0)
(4) 通过xpath方式找到
self.driver.switch_to.frame(self.driver.find_element_by_xpath("//iframe"))
43、 用frame中的关键字做断言
self.driver.switch_to.frame(frame)
# 判断每个frame的HTML源码中是否包含“中间 frame”几个关键词
if u"中间 frame" in self.driver.page_source:
44、 Confirm弹窗
button = self.driver.find_element_by_id("button") button.click() alert = self.driver.switch_to.alert
time.sleep(2)
# 使用alert.text属性获取confirm框中的内容,
# 并断言文字内容是否是“这是一个 confirm 弹出框”
self.assertAlmostEqual(alert.text, u"这是一个 confirm 弹出框")
# 调用alert对象的accept()方法,模拟鼠标单击confirm弹窗上的“确定”按钮
# 以便关闭confirm窗
#alert.accept()
# 取消下面一行代码的注释,就会模拟单击confirm框上的“取消”按钮
alert.dismiss()
45、 Alert弹窗
button = self.driver.find_element_by_id("button") button.click() # 使用driver.switch_to_alert()方法获取alert对象
alert = self.driver.switch_to.alert
time.sleep(2)
# 使用alert.text属性获取alert框中的内容,
# 并断言文字内容是否是“这是一个 alert 弹出框”
self.assertAlmostEqual(alert.text, u"这是一个 alert 弹出框")
# 调用alert对象的accept()方法,模拟鼠标单击alert弹窗上的“确定”按钮
# 以便关闭alert窗
alert.accept()
46、 Prompt弹窗
element = self.driver.find_element_by_id("button")
element.click() alert = self.driver.switch_to.alert
self.assertEqual(u"这是一个 prompt 弹出框", alert.text) alert.send_keys(u"要想改变命运,必须每天学习2小时!") alert.accept() # alert.dismiss() 47、 Cookies 返回一个字典类型的数据
cookies = self.driver.get_cookies()
for cookie in cookies:
print "%s -> %s -> %s -> %s -> %s" \
% (cookie['domain'], cookie["name"], cookie["value"], \
cookie["expiry"], cookie["path"]) ck = self.driver.get_cookie("SUV")
self.driver.delete_cookie("ABTEST")
self.driver.delete_all_cookies()
48、 通过构造js语句,执行js语句来完成页面元素的搜索和点击
# 构造JavaScript查找百度首页的搜索输入框的代码字符串
searchInputBoxJS = "document.getElementById('query').value='光荣之路';"
# 构造JavaScript查找百度首页的搜索按钮的代码字符串
searchButtonJS = "document.getElementById('stb').click()" # 通过JavaScript代码在百度首页搜索输入框中输入“光荣之路”
self.driver.execute_script(searchInputBoxJS)
time.sleep(2)
# 通过JavaScript代码点击百度首页上的搜索按钮
self.driver.execute_script(searchButtonJS) 49、 纵轴滚动条
# 将页面的滚动条滑动到页面的最下方
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 横轴滚动,document.body.scrollWidth/2,滚动横轴的一半坐标 self.driver.execute_script("document.getElementsByTagName('a')[500].scrollIntoView(true);")
#for i in range(10,900):
#driver.execute_script("document.getElementsByTagName('a')[%s].scrollIntoView(true);" %i) #("document.getElementById('choice').scrollIntoView(true);") # 将页面纵向向下滚动400像素
self.driver.execute_script("window.scrollBy (0,400);")
50、 选择悬浮窗中第几个联想词(webdriver方法)
for i in range(3):
# 选择悬浮框中中第几个联想关键词选项就循环几次
# 模拟键盘点击下箭头
searchBox.send_keys(Keys.DOWN)
time.sleep(0.5)
# 当按下箭头到想要选择的选项后,再模拟键盘点击回车键,选中该选项
searchBox.send_keys(Keys.ENTER) 51、 选择悬浮窗中第几个联想词(xpath序号方法)
# 查找浮动框中的第三选项,只要更改li[3]中的索引数字,
# 就可以实现任意单击选项浮动框中的选项。注意,索引从1开始
suggetion_option = self.driver.find_element_by_xpath("//*[@id='vl']/div[1]/ul/li[3]") # 点击找到的选项
suggetion_option.click() 52、 选择悬浮窗中第几个联想词(xpath关键词方法)
# 查找内容包含“篮球电影”的悬浮选项
suggetion_option = self.driver.find_element_by_xpath("//ul/li[contains(., '电影')]")
# 点击找到的选项
suggetion_option.click() 53、 结束浏览器进程
#使用场景:quit出现异常导致很多浏览器不能正常关闭;或需要在启动浏览器前先杀一遍# 导入Python的os包
import os
# 结束Firefox浏览器进程
returnCode = os.system("taskkill /F /iM firefox.exe")
if returnCode == 0:
print u"成功结束Firefox浏览器进程!"
else:
print u"结束Firefox浏览器进程失败!" 54、 删除、新增页面元素属性
55、 下载文件
【webdriver自动化】整理API框架(主要是关键字,具体例子在本地)的更多相关文章
- appium自动化常用API
常用函数 一.获得信息类API (1)获取当前页面的activity名,比如: (.ui.login.ViewPage) current_activity() 比如我们需要实现这个登录的功能时,主要 ...
- 某互联网后台自动化组合测试框架RF+Sikuli+Python脚本
某互联网后台自动化组合测试框架RF+Sikuli+Python脚本 http://www.jianshu.com/p/b3e204c8651a 字数949 阅读323 评论1 喜欢0 一.**Robo ...
- JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?
前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...
- 2022年Python顶级自动化特征工程框架⛵
作者:韩信子@ShowMeAI 机器学习实战系列:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/artic ...
- 学习ASP.NET Web API框架揭秘之“HTTP方法重写”
最近在看老A的<ASP.NET Web API 框架揭秘>,这本书对于本人现阶段来说还是比较合适的(对于调用已经较为熟悉,用其开发过项目,但未深入理解过很多内容为何可以这样“调用”).看到 ...
- PHP API 框架开发的学习
基于互联网的应用正变得越来越普及,在这个过程中,有更多的站点将自身的资源开放给开发者来调用.对外提供的API 调用使得站点之间的内容关联性更强,同时这些开放的平台也为用户.开发者和中小网站带来了更大的 ...
- ASP.NET Web API框架揭秘:路由系统的几个核心类型
ASP.NET Web API框架揭秘:路由系统的几个核心类型 虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分 ...
- 【从零开始搭建自己的.NET Core Api框架】(七)授权认证进阶篇
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- 【从零开始搭建自己的.NET Core Api框架】(一)创建项目并集成swagger:1.1 创建
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
随机推荐
- atom - Emmet插件使用,代码快速填写
参考转载:http://www.hangge.com/blog/cache/detail_1537.html 用法: 输入:ul>li*6 接着按:tab键 常用语法: 1.后代>: ...
- 使用INTERSECT运算符
显示符合以下条件的雇员的雇员ID 和职务ID:这些雇员的当前职务与以前的职务相同,也就是说这些雇员曾担任过别的职务,但现在又重新担任了以前的同一职务. hr@TEST0924> SELECT e ...
- Mysql优化要点
优化MySQL Mysql优化要点 慢查询 Explain mysql慢查询 注意事项 SELECT语句务必指明字段名称 SELECT *增加很多不必要的消耗(cpu.io.内存.网络带宽):增加了使 ...
- Tomcat禁用SSLv3和RC4算法
1.禁用SSLv3(SSL 3.0 POODLE攻击信息泄露漏洞(CVE-2014-3566)[原理扫描]) 编缉$CATALINA_HOEM/conf/server.xml配置文件,找到https端 ...
- 搜索路径---PYTHONPATH 变量
- absolute 导致点击事件无效
方案一: 添加层数 z-index 方案二: 背景的透明度为0 background-color:#000; filter:alpha(opacity=0); opacity:0;
- Node.js是用来干嘛的
如果你去年注意过技术方面的新闻,我敢说你至少看到node.js不下一两次.那么问题来了“node.js是什么?”.有些人没准会告诉你“这是一种通过JavaScript语言开发web服务端的东西”.如果 ...
- ID基本操作(创建主页,复制主页,把主页应用到多个页面)5.11
主页上的对象将会显示在应用在这个主页上的所有页面. 一.创建主页的方法: 1.页面面板,右上方点击,可以新建主页..前缀:用来识别页面面板中的各个页面所应用的主页.最多可输入四个字符.名称:输入主页跨 ...
- node编译C++,比如安装node-gyp失败的问题
遇到的这个问题是很多需要编译才能运行的node模块共有的问题. npm i -g windows-build-tools 首先以管理员身份打开命令行,然后在命令行下执行这一行命令. 然后重新运行你刚才 ...
- 【转载】OpenCV 摄像头控制
参考:[OpenCV] -- 简单摄像头操作 - 代码人生 - 博客频道 - CSDN.NET http://blog.csdn.net/qiurisuixiang/article/details/8 ...