1、打开浏览器的驱动,以chrome为例

from selenium import webdriver
#chrome驱动
driver = webdriver.Chrome(executable_path="c:\\chromedriver")
driver.get('http://www.baidu.com')
driver.find_element_by_id("kw") #返回一个页面元素
driver.find_element_by_id("kw").send_keys("光荣之路")

2、浏览器最大化,前进和后退

>>> driver.maximize_window()  #浏览器窗口最大化
>>> driver.back() #浏览器后退
>>> driver.forward() #浏览器前进

3、强制刷新

>>> driver.refresh()  #强制刷新页面

4、控制浏览器的位置:把浏览器放到固定的位置

>>> driver.set_window_position(y=200, x=400)
>>> position = driver.get_window_position()
>>> position
{'x': 400, 'y': 200}

5、设置窗口大小

>>> driver.set_window_size(width = 200, height = 400, windowHandle='current')
>>> driver.get_window_size()
{'width': 516, 'height': 400}

6、获取title,判断在哪个页面

>>> driver.get("http://iciba.com")
>>> driver.title
'在线翻译_在线词典_金山词霸_爱词霸英语'

7、获取源码

>>> driver.get("http://iciba.com")
>>> driver.page_source[:50]
'<!DOCTYPE html><html xmlns="http://www.w3.org/1999'

8、断言源码中的关键字

>>> assert "英语" in driver.page_source  #源码中存在
>>> assert "英语1" in driver.page_source #源码中不存在
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError

9、获取当前url

>>> driver.current_url

10、句柄操作

# 获取当前窗口句柄
now_handle = driver.current_window_handle

# 获取所有窗口句柄
all_handles = self.driver.window_handles

# 切换窗口
self.driver.switch_to.window(handle)

拿到句柄就像找到了窗口。

切换句柄代码举例:

#encoding=utf-8
import unittest
import time
import chardet
from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self):
# 启动chrome浏览器
self.driver = webdriver.Chrome() def test_operateWindowHandle(self):
url = "http://www.baidu.com"
self.driver.get(url)
# 获取当前窗口句柄
now_handle = self.driver.current_window_handle
# 打印当前获取的窗口句柄
print (now_handle)
# 百度搜索输入框中输入“selenium”
self.driver.find_element_by_id("kw").send_keys("w3cschool")
# 点击搜索按钮
self.driver.find_element_by_id("su").click()
# 导入time包
import time
# 等待3秒,以便网页加载完成
time.sleep(3)
# 点击w3school在线教育链接
self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click()
time.sleep(5)
# 获取所有窗口句柄
all_handles = self.driver.window_handles
print(all_handles)
# 循环遍历所有窗口句柄
for handle in all_handles:
self.driver.switch_to.window(handle)
#判断源码的关键字
print('*'*50)
print(self.driver.current_url)
print('*'*50)
if "百度热榜" in self.driver.page_source:
time.sleep(5)
self.driver.find_element_by_xpath("//*[@id='5']/h3/a").click()
time.sleep(5)
self.driver.close()
elif "培训和测试" in self.driver.page_source:
time.sleep(5)
self.driver.find_element_by_xpath('//*[@id="course"]/ul/li[5]/a').click()
time.sleep(5) def tearDown(self):
# 退出IE浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main()

11、获取页面元素的基本信息

driver.get("https://www.baidu.com")
newsElement = driver.find_element_by_xpath("//*[text()='新闻']")
print (u"元素的标签名:", newsElement.tag_name) #元素的标签名: a
print (u"元素的size:", newsElement.size) #元素的size: {'height': 23, 'width': 26}
print(u"元素的文本:",newsElement.text) #元素的文本: 新闻
print(u"元素的链接:",newsElement.get_attribute("href")) #元素的链接: http://news.baidu.com/

12、判断页面元素是否显示

driver.get(url)
div1 = driver.find_element_by_id("div1")
print (div1.is_displayed()) #判断是否见

13、判断元素是否可操作

driver.get(url)
input1 = self.driver.find_element_by_id("input1")
print (input1.is_enabled())

14、页面元素的属性

driver.get(url)
# 找到搜索输入框元素
searchBox = driver.find_element_by_id("query")
# 获取搜索输入框页面元素的name属性值
print (searchBox.get_attribute("name")) # 向搜索输入框中输入“测试工程师指定的输入内容”内容
searchBox.send_keys(u"测试工程师指定的输入内容")
# 获取页面搜索框的value属性值(即搜索输入框的文字内容)
print (searchBox.get_attribute("value"))

15、获取css属性值

driver.get(url)
searchBox = driver.find_element_by_id("kw")
searchBox.value_of_css_property("height")
searchBox.value_of_css_property("width")
searchBox.value_of_css_property("font-family")

16、清空输入框

driver.get(url)
input = driver.find_element_by_id("kw")
input.send_keys(u"测试开发招聘")
input.clear() #清空输入框

17、单击元素

driver.get(url)
button = driver.find_element_by_id("button")
button.click() #模拟鼠标左键单击操作

18、双击元素

from selenium.webdriver import ActionChains

driver.get(url)
inputBox = driver.find_element_by_id("inputBox")
action_chains = ActionChains(driver)
action_chains.double_click(inputBox).perform() #固定用法

19、操作下拉框

方法1:

driver.get(url)
# 使用name属性找到页面上name属性为“fruit”的下拉列表元素
select = self.driver.find_element_by_name("fruit")
all_options = select.find_elements_by_tag_name("option")
for option in all_options:
if option.text =="猕猴桃":
option.click()

方法2:

driver.get(url)
# 导入Select模块
from selenium.webdriver.support.ui import Select
# 使用xpath定位方式获取select页面元素对象
select_element = Select(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")

20、断言

继承unittest.TestCase,使用 assertListEqual()

21、操作多选框

driver.get(url)
# 导入Select模块
from selenium.webdriver.support.ui import Select
# 使用xpath定位方式获取select页面元素对象
select_element = Select(driver.find_element_by_xpath("//select")) #选中
# 通过序号选择第一个元素
select_element.select_by_index(0)
# 通过选项的文本选择“山楂”选项
select_element.select_by_visible_text("山楂")
# 通过选项的value属性值选择value=“mihoutao”的选项
select_element.select_by_value("mihoutao") #取消选中
# 通过选项文本取消已选中的文本为“荔枝”选项
select_element.deselect_by_visible_text("荔枝")
# 通过序号取消已选中的序号为1的选项
select_element.deselect_by_index(1)
# 通过选项的value属性值取消已选中的value=“juzi”的选项
select_element.deselect_by_value("juzi")

22、操作单选框

driver.get(url)
# 使用xpath定位获取value属性值为'berry'的input元素对象,也就是“草莓”选项
berryRadio = driver.find_element_by_xpath("//input[@value='berry']")
# 点击选择“草莓”选项
berryRadio.click() # 断言“草莓”复选框被成功选中
assertTrue(berryRadio.is_selected(), u"草莓复选框未被选中!")

23、操作复选框:同上

24、截图

driver.get_screenshot_as_file(filename)

25、拖拽元素

initialPosition = driver.find_element_by_id("draggable")
targetPosition = driver.find_element_by_id("draggable2")
from selenium.webdriver import ActionChains
action_chains = ActionChains(driver)
# 将页面上第一个能被拖拽的元素拖拽到第二个元素位置
action_chains.drag_and_drop(initialPosition, targetPosition).perform()

26、键盘操作

#encoding=utf-8
import unittest
import time
import chardet
from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self):
self.driver = webdriver.Chrome() def test_simulateASingleKeys(self):
url = "http://www.baidu.com"
self.driver.get(url)
# 导入模拟按键模块Keys
from selenium.webdriver.common.keys import Keys # 输入框输入内容
self.driver.find_element_by_id("kw").send_keys("seleniumm")
time.sleep(5)

#通过WebDriver实例发送一个F12键
self.driver.find_element_by_id("kw").send_keys(Keys.F12)
time.sleep(5)

# 删除多输入的一个 m
self.driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
time.sleep(10) # 输入空格键+“教程”
self.driver.find_element_by_id("kw").send_keys(Keys.SPACE)
self.driver.find_element_by_id("kw").send_keys("教程")
time.sleep(10) # ctrl+a 全选输入框内容
self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
time.sleep(10) # ctrl+x 剪切输入框内容
self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')
time.sleep(10) # ctrl+v 粘贴内容到输入框
self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')
time.sleep(10) # 通过回车键来代替单击操作
self.driver.find_element_by_id("su").send_keys(Keys.ENTER)
time.sleep(10) def tearDown(self):
self.driver.quit() if __name__ == '__main__':
unittest.main()

27、鼠标右键

#鼠标右键
#encoding=utf-8
import unittest
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
import win32clipboard as w
import win32con # 设置剪切板内容
def setText(aString):
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard() class VisitSogouByIE(unittest.TestCase): def setUp(self):
self.driver = webdriver.Chrome() def test_rigthClickMouse(self):
url = "http://www.sogou.com"
# 访问搜狗首页
self.driver.get(url)
# 找到搜索输入框
searchBox = self.driver.find_element_by_id("query")
# 将焦点切换到搜索输入框
searchBox.click()
time.sleep(2)
# 在搜索输入框上执行一个鼠标右键点击操作
ActionChains(self.driver).context_click(searchBox).perform()
# 将“gloryroad”数据设置到剪切板中,相当于执行了复制操作
setText(u'gloryroad')
time.sleep(4)
# 发送一个粘贴命令,字符p指代粘贴操作
ActionChains(self.driver).send_keys('P').perform()
# 点击搜索按钮
self.driver.find_element_by_id('stb').click()
time.sleep(10) def tearDown(self):
# 退出IE浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main()

28、模拟鼠标左键和释放

from selenium.webdriver import ActionChains

driver.get(url)
div = driver.find_element_by_id("div1") # 在id属性值为“div1”的元素上执行按下鼠标左键,并保持
ActionChains(driver).click_and_hold(div).perform() # 在id属性值为“div1”的元素上释放一直释放的鼠标左键
ActionChains(driver).release(div).perform()

29、鼠标悬浮

from selenium.webdriver import ActionChains

driver.get(url)
# 找到页面上的链接元素
link = driver.find_element_by_partial_link_text(u"指过来")
# 找到页面上的p元素
p = driver.find_element_by_xpath("//p") # 将鼠标悬浮到第一个链接元素上
ActionChains(driver).move_to_element(link).perform() # 将鼠标从第一个链接元素移动到p元素上
ActionChains(driver).move_to_element(p).perform()

30、判断页面元素是否存在

driver.find_element(by, value)

# 判断页面元素id属性值为“query”的页面元素是否存在

driver.find_element("id", "query")
driver.find_element("xpath", "//input[@id='query']")

31、设置隐式等待

driver.implicitly_wait(10)

32、设置显式等待

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions driver = webdriver.Chrome()
driver.get("http://www.sogou.com")
input_box=driver.find_element_by_id("query") #等待10s,每200毫秒重试一次
wait = WebDriverWait(driver, 10, 0.2)
# 每200ms判断一次是否元素可见
wait.until(expected_conditions.visibility_of(input_box))

33、切入切出frame

#1 使用索引方式进入指定的frame页面,索引号从0开始。
driver.switch_to.frame(0) #2 通过标签名找到页面中所有的frame元素,然后通过索引进入该frame
driver.switch_to.frame(driver.find_elements_by_tag_name("frame")[1]) #3 通过id进入frame
driver.switch_to.frame(driver.find_element_by_id("rightframe"))
#4 退出frame
driver.switch_to.default_content()

33、指定页面的加载时间

driver.set_page_load_timeout(4)

34、操作alert框

# 获取alert对象
alert = driver.switch_to.alert # 使用alert.text属性获取alert框中的内容,并断言文字内容
assertAlmostEqual(alert.text, u"这是一个 alert 弹出框") # 调用alert对象的accept()方法,模拟鼠标单击alert弹窗上的“确定”按钮,以便关闭alert窗
alert.accept() # 取消按钮,模拟单击confirm框上的“取消”按钮
alert.dismiss()

35、获取cookie

#得到当前页面下所有的Cookies
driver.get_cookies()
#根据Cookie的name值获取该条Cookie信息
driver.get_cookie("SUV") # 删除cookie有2种方法
# 第一种:通过Cookie的name属性,删除name值为“ABTEST”的Cookie信息
driver.delete_cookie("ABTEST")
# 第二种:一次性删除全部Cookie信息
driver.delete_all_cookies() # 添加自定义Cookie信息
driver.add_cookie({"name": "gloryroadTrain", 'value': '1479697159269020'})

36、键盘的上下左右操作

driver.get("http://baidu.com")
搜索:element=driver.find_element_by_name("wd")
导入Keys:
from selenium.webdriver.common.keys import Keys
回车:element.send_keys(Keys.ENTER)
清理:element.clear()
上:element.send_keys(Keys.ARROW_UP)
下:element.send_keys(Keys.ARROW_DOWN)
左:element.send_keys(Keys.ARROW_LEFT)
右:element.send_keys(Keys.ARROW_RIGHT)

Selenium的基本api的更多相关文章

  1. Python Selenium 之常用API

    Selenium WebDriver下提供许多用来与浏览器.元素.鼠标.键盘.弹框.下拉菜单和列表的交互和设置方法.这些是计算机模拟人工进行自动化测试所必要依赖的方法.下面将用列表的方式总结出常用的A ...

  2. selenium常用的API(七)判断元素是否可见

    web页面不可见的元素虽不在页面上显示,但是存在于DOM树中,这些元素webdriver也能找到. element.is_displayed()方法可以判断元素是否在页面上显示,如果显示返回True, ...

  3. selenium常用的API(一)截屏

    我们在使用selenium测试过程中,可使用截屏功能将用例执行失败的画面截图保存,方便测试执行结束后查看并定位问题. 以下介绍两种截屏方法: 对当前浏览器窗口截屏 使用selenium自带的get_s ...

  4. selenium常用的API

    打开浏览器 driver.get("http://www.baidu.com") 最大化浏览器 driver.maximize_window() 关闭浏览器 driver.quit ...

  5. Selenium - Switch & Select Api

    一.多表单切换  driver.switch_to.frame() iframe  :直接将一个html 页面嵌入另一个html 页面中 switch_to.frame() 默认可以直接取表单的id ...

  6. 【selenium+Python WebDriver API】之复选框顺序正选和顺序反选

    from selenium import webdriver from selenium.webdriver.common.by import By import os,time driver = w ...

  7. selenium常用的API(六)浏览器窗口切换

    当使用selenium webdriver进行自动化测试打开多个窗口的时候,可能需要在不同的窗口间进行切换,webdriver提供的获取浏览器窗口句柄.切换句柄的方法如下: 获取当前窗口句柄 driv ...

  8. selenium常用的API(五)获取title、刷新、前进和后退

    获取网页title的属性值 #encoding=utf-8 from selenium import webdriver import unittest import time class Visit ...

  9. selenium常用的API(四)设置get方法最大加载时间

    我们在进行自动化测试的时候,使用get方法打开页面时会等到页面完全加载完才会执行后续操作, 有时我们需要的元素已加载完成,而部分JS未加载完导致加载时间很长,这无疑增加了自动化测试的时间, 针对此情况 ...

  10. selenium常用的API(三)获取网页title、html源码

    获取网页title 获取页面title的方法可以直接用driver.title获取到,然后可以把获取到的结果用做断言. #encoding=utf-8 from selenium import web ...

随机推荐

  1. Java 配置 HTTP/Socks 代理竟能如此简单

    在网络请求过程中,使用代理是一种常见的需求.代理服务器可以帮助我们隐藏真实的 IP 地址.加速访问速度.访问公司特定内网等等要求.在 Java 中,我们可以通过一些库或框架来实现代理的设置和使用. 但 ...

  2. 数据库重构之路,以 OrientDB 到 NebulaGraph 为例

    "本文由社区用户 @阿七从第一视角讲述其团队重构图数据库的过程,首发于阿七公众号「浅谈架构」" 原文出处:https://mp.weixin.qq.com/s/WIJNq-nuuA ...

  3. XL-Formula流式统计运算方式配置说明

    1.简介 XL-Formula是一种用于描述流式统计运算方式的配置标准,它代表着一种通用型流式统计系统的实现方法,更深层次它代表着一种以通用型流式统计技术为切入点,低成本实现企业数据化运营的理念.该配 ...

  4. Dami 本地过程调用框架(主打解耦),v0.24 发布

    Dami,专为本地多模块之间通讯解耦而设计(尤其是未知模块.隔离模块.领域模块).零依赖,特适合 DDD. 特点 结合 Bus 与 RPC 的概念,可作事件分发,可作接口调用,可作异步响应. 支持事务 ...

  5. Kong网关

    Kong网关 一.kong网关核心概念 1. Upstream upstream 对象表示虚拟主机名,可用于通过多个服务对传入请求进行负载远的 2. Target 目标ip地址/主机名,其端口表示后端 ...

  6. vue2原理初探-数据代理和数据劫持

    本篇文章主要想简单聊聊vue如何实现数据修改,页面联动的底层原理. 当然,篇幅有限,只是自己一些浅显的认知而已,我会从一下几个方面去聊,希望对你有所帮助. 几个基础知识点 数据代理 数据劫持 完整de ...

  7. 🖖少年,该升级 Vue3 了!

    你好,我是 Kagol. 前言 根据 Vue 官网文档的说明,Vue2 的终止支持时间是 2023 年 12 月 31 日,这意味着从明年开始: Vue2 将不再更新和升级新版本,不再增加新特性,不再 ...

  8. Ds100p -「数据结构百题」21~30

    21.P4172 [WC2006]水管局长 SC 省 MY 市有着庞大的地下水管网络,嘟嘟是 MY 市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从 \(x ...

  9. DHCP是什么

    DHCP 1. DHCP是什么 协议,一种应用层的网络协议,他可以动态地分配网络中的IP地址和其他网络配置的参数以及网络设备,通俗一点讲,每台设备的IP地址,子网掩码,网关等网络参数信息都是由他来完成 ...

  10. How to Install Bugzilla on Ubuntu 20.04

    In this blog post, we are going to explain in step-by-step detail on how to install Bugzilla on Ubun ...