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()
View Code
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)