webdriver

1、第一个自动化测试脚本

# 第一个自动化测试脚本

from selenium import webdriver
from time import sleep

# 加载浏览器驱动
driver = webdriver.Firefox()

# 打开163邮箱页面
driver.get("https://mail.163.com/")
print(driver.title)
sleep(3)

# 打开百度首页
driver.get("http://www.baidu.com")
print(driver.title)
sleep(3)

# 关闭浏览器
driver.quit()

 2、浏览器操作脚本

'''
浏览器操作
浏览器窗口大小设置
页面前进后退
页面刷新
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()

driver.get('http://www.baid.com')
# 窗口最大化
driver.maximize_window()
sleep(2)

driver.get("http://www.baidu.com")
# 自定义出口大小
driver.set_window_size(400, 800)
# 窗口刷新
driver.refresh()
sleep(2)

# 回退
driver.back()
sleep(2)

# 前进
driver.forward()
sleep(2)

# 退出
driver.quit()

 3、元素定位

元素定位
元素的定位应该是自动化测试的核心,要想操作一个元素,首先应该识别这个元素。
webdriver提供了一系列的元素定位方法,常用的有:
id、name、class name、link text、partial link text、tag name、xpath、css selector

(1)、id和name定位

'''
元素定位
元素的定位应该是自动化测试的核心,要想操作一个元素,首先应该识别这个元素。
webdriver提供了一系列的元素定位方法,常用的有:
id、name、class name、link text、partial link text、tag name、xpath、css selector

打开百度首页,在搜索框自动输入"selenium"关键词,然后点击搜索按钮,查看搜索页面
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

driver.find_element_by_id('kw').send_keys("selenium")
driver.find_element_by_name('wd').send_keys("加油")
sleep(2)

driver.find_element_by_id('su').click()

 (2)、tag name定位

'''
元素定位之tag name
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

#定位标签名为input的元素
driver.find_element_by_tag_name('input').send_keys('selenium')

#获取页面所有标签名为input的标签
driver.find_elements_by_tag_name('input')[0].send_keys('selenium')

sleep(3)

driver.quit()

 (3)、class name定位

'''
元素定位之class name
根据标签中属性class来进行定位的一种方法
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()

driver.get("http://www.baidu.com")

driver.find_element_by_class_name('s_ipt').send_keys('selenium')

driver.find_element_by_id('su').click()

sleep(2)

driver.quit()

 (4)、link text定位

'''
元素定位之link text
link_text定位就是根据超链接文字进行定位
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()

driver.get('http://www.baidu.com')
driver.find_element_by_link_text('新闻').click()
sleep(3)

driver.find_element_by_partial_link_text('新').click()
sleep(2)

driver.quit()

 (5)、XPath定位

XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

绝对定位和相对定位

'''
元素定位之xpath
XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力
绝对定位和相对定位
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()

driver.get('http://www.baidu.com')

#绝对路径定位
driver.find_element_by_xpath("/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input").send_keys('selenium')

#相对定位
#利用元素属性定位  定位到input标签中为kw的元素
driver.find_element_by_xpath("//input[@id='kw']").send_keys('selenium')

#定位input标签中name属性为的wd元素
driver.find_element_by_xpath("//input[@name='wd']").send_keys('selenium')

#定位所有标签元素中,class属性为s_ipt的元素
driver.find_element_by_xpath(("//*[@class='s_pt']")).send_keys('Python')

driver.find_element_by_id('su').click()
sleep(3)

driver.quit()

 层级与逻辑组合定位

'''
元素定位之xpath
层级与逻辑定位
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()

driver.get('http://www.baidu.com')

# 层级和属性结合定位  输入用户名和密码
driver.find_element_by_xpath("//form[@id='loginForm']/ul/input[1]").send_keys('selenium')
driver.find_element_by_xpath("//form[@id='loginForm']/ul/input[2]").send_keys('123456')
sleep(3)

# 逻辑运算组合定位
driver.find_element_by_xpath("//input[@class='loinp' and @name='username']").send_keys('selenium')
sleep(2)

driver.quit()

(6)、css定位

 selenium极力推荐使用CSS定位,而不是xpath来定位元素,原因是css定位比xpath定位速度快,语法也更加简洁

css常用定位方法:
find_element_by_css_selector()
#id id选择器根据id属性来定位元素
.class class选择器根据class属性值来定位元素
[attribute='value']根据属性来定位元素
element>element 根据元素层级来定位 父元素>子元素

'''
元素定位之css
selenium极力推荐使用CSS定位,而不是xpath来定位元素,原因是css定位比xpath定位速度快,语法也更加简洁
css常用定位方法:
find_element_by_css_selector()
1、#id id选择器根据id属性来定位元素
2、.class class选择器根据class属性值来定位元素
3、[attribute='value']根据属性来定位元素
4、element>element 根据元素层级来定位 父元素>子元素
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()

driver.get("http://www.baidu.com")

# 根据id来定位
driver.find_element_by_css_selector('#kw').send_keys('selenium')
sleep(3)

# 根据class定位
driver.find_element_by_css_selector('.s_ipt').send_keys('selenium')
sleep(3)

# 通过属性定位
driver.find_element_by_css_selector("[autocomplete='off']").send_keys("selenium")
sleep(3)
driver.find_element_by_id('su').click()
sleep(2)

# 通过元素层级定位
driver.find_element_by_css_selector("form#loginForm>ul>input").send_keys('selenium')
driver.find_element_by_css_selector("form#loginForm>ul>input[type='password']").send_keys('selenium')

driver.quit()

 (7)、下拉菜单选项定位

根据选项元素标签定位

'''
元素定位之下拉菜单元素定位
1、根据选项元素标签定位
在我要自学网登录页面选择指定的保留时间
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get('http://www.zxw.net')
sleep(1)

# 根据option标签定位
driver.find_element_by_tag_name('option')[1].click()
driver.find_element_by_css_selector('[value="1"]').click()
sleep(2)

driver.quit()

 使用Select类定位

'''
元素定位之下拉菜单元素定位
2、使用Select类定位
'''

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import Select

driver = webdriver.Firefox()
driver.get("http://www.zxw.net")
sleep(2)

# 利用Select类来进行定位
select = Select(driver.find_element_by_css_selector("[name='CookieDate]"))

select.select_by_index(2)
select.select_by_visible_text('留一年')
select.select_by_value("1")
sleep(2)

driver.quit()

 4、鼠标操作

鼠标操作
实现思路:
需要引入ActionChains类
然后定位相关元素
在ActionChains().调用相关鼠标操作方法

'''
鼠标操作
实现思路:
需要引入ActionChains类
然后定位相关元素
在ActionChains().调用相关鼠标操作方法
'''

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.maximize_window()

driver.find_element_by_css_selector("#kw").send_keys('python')

# 获取搜索框元素对象
element = driver.find_element_by_css_selector("#kw")
sleep(3)

# 双击操作
ActionChains(driver).double_click(element).perform()
sleep(2)

# 右击操作
ActionChains(driver).context_click(element).perform()
sleep(3)

# 鼠标悬停
above = driver.find_element_by_css_selector(".pf")
ActionChains(driver).move_to_element(above).perform()
sleep(2)

driver.quit()

 5、键盘操作

'''
键盘操作
在百度搜索关键词python,然后将关键词复制或剪切到搜狗搜索框进行搜索
'''

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.find_element_by_css_selector("#kw").send_keys("python")
sleep(2)

# 键盘全选操作Ctrl+a
driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL, 'a')

# 键盘选择复制或剪切操作Ctrl+c、Ctrl+x
driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL, 'c')
driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL, 'x')

# 打开搜狗页面
driver.get("http://www.sogou.com")
sleep(2)

# 粘贴复制内容
driver.find_element_by_css_selector(".sec-input").send_keys(Keys.CONTROL, 'v')
sleep(2)

# 点击搜索按钮
driver.find_element_by_xpath("//input[@id='stb]").click()
driver.find_element_by_css_selector("#stb").click()

sleep(3)
driver.quit()

 6、元素等待

显示等待

'''
元素等待
概念:
显示等待是针对某一个元素进行相关等待判定
隐式等待不针对某一元素进行等待,全局元素等待
相关模块:
WebDriverWait显示等待针对元素必用
expected_conditions预期条件类(里面包含方法可以调用,用于显示等待)
NoSuchElementException用于隐式等待抛出异常
By用于元素定位
案例:检测百度页面搜索按钮是否存在,存在就输入关键词"selenium"然后点击
'''

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
sleep(2)

driver.find_element_by_css_selector("#kw").send_keys("selenium")

element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'su')))
element.click()

sleep(3)
driver.quit()

隐式等待

'''
隐式等待
'''

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep, ctime

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
sleep(2)

# 隐式等待时间设定5秒
driver.implicitly_wait(5)

# 检测搜索框是否存在
try:
    print(ctime())
    driver.find_element_by_css_selector("#kw").send_keys("python")
    driver.find_element_by_css_selector("#su").click()
except NoSuchElementException as msg:
    print(msg)
finally:
    print(ctime())

sleep(3)
driver.quit()

 7、嵌套页面元素定位

frame.html

<html>
<title>Frame Test</title>
<body>
	<div>
		<iframe id="search" src="http://www.sogou.com" width="800" height="500"></iframe>
	</div>	
</body>
</html>

 

'''
frame嵌套页面元素定位
案例:在frame.html文件中定位搜狗搜索页面,进行搜索操作
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()

# 设置网页文件路径,r代表路径转义
file_path = r"E:\python\webdriver\frame.html"
driver.get(file_path)

# 切换到frame页面内
driver.switch_to.frame("search")

# 定位到搜索框按钮输入关键词
driver.find_element_by_css_selector("#query").send_keys("python")
sleep(2)

driver.find_element_by_css_selector("#stb").click()
sleep(2)

driver.quit()

 8、多窗口切换

'''
多窗口切换操作
案例:打开我要自学网seleniu课程主页,然后打开2-1课程详情页面,再回到课程主页打开3-1课程详情页面
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()

driver.get("http://www.zxw.net")

# 获取课程主页打窗口句柄
selenium_index = driver.current_window_handle
sleep(2)

# 点击2-1课程链接,进入课程详情页面
driver.find_element_by_partial_link_text("2-1").click()
sleep(3)

# 跳转到课程主页窗口,点击3-1课程
driver.switch_to.window(selenium_index)
sleep(3)
driver.find_element_by_partial_link_text("3-1").click()
sleep(3)

driver.quit()

 9、警告弹窗处理

'''
警告弹窗处理
案例:点击百度首页设置按钮,然后保存弹出警告窗口进行相关处理
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

driver.find_element_by_link_text("设置").click()
sleep(2)

driver.find_element_by_link_text("搜索设置").click()
sleep()

driver.find_element_by_link_text("保存设置").click()
driver.find_element_by_link_text("恢复默认").click()

alert = driver.switch_to.alert()

alert.accept()
sleep(2)

driver.quit()

 10、上传文件

'''
上传文件
案例:在百度搜索上传本地图片进行搜索
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

driver.find_element_by_css_selector(".soutu-btn").click()
sleep(3)

driver.find_element_by_css_selector(".upload-pic").send_keys(r"E:\python\shuiyin.png")

sleep(3)
driver.quit()

 11、浏览器滚动条操作

'''
滚动条控制操作
案例:打开我要自学网页面,然后将滚动条拖到最底部,再拖到顶部
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.zxw.net")

#将滚动条拖到最底部
js = "var action=document.documentElement.scrollTop=10000"
driver.execute_script(js)
sleep(2)

#将滚动条拖到最顶部
js = "var action=document.documentElement.scrollTop=0"
driver.execute_script(js)
sleep(2)

driver.quit()

 12、网页自动截图

'''
网页自动截图
案例:分别打开我要自学网页面和百度页面,然后进行截图
'''

from selenium import webdriver
from time import sleep

# 加载浏览器驱动
driver = webdriver.Firefox()

# 打开我要自学网页面并截图
driver.get("http://www.zxw.net")
driver.get_screenshot_as_file(r"E:\python\zxw.jpg")
sleep(2)

# 打开百度页面并截图
driver.get("http://www.baidu.com")
driver.get_screenshot_as_file(r"E:\pyhon\baidu.jpg")
sleep(2)

driver.quit()

 13、Cookie处理

'''
Cookie处理
Cookie是存储在用户本地终端上的数据,实际上是一小段的文本信息
Cookie的作用是帮助Web站点保存有关访问者的信息,方便用户的访问。如记住用户名密码实现自动登录
'''

from selenium import webdriver
from time import sleep

# 加载浏览器驱动
driver = webdriver.Firefox()

driver.get("http://www.zxw.net")

# 获取Cookie信息
cookie = driver.get_cookie()
print(cookie)
print(cookie[0])
sleep(3)

# 添加Cookie信息
driver.add_cookie({"name": "test", "value": "jiayou"})
for cookie in driver.get_cookie():
    print("%s--%s" % (cookie['name'], cookie['value']))

driver.quit()

 14、基于Cookie绕过验证码自动登录

'''
基于Cookie绕过验证码自动登录
'''

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

# 手动添加cookie
driver.add_cookie({'name': 'BAIDUID', 'value': 'aaaaaaaaaa'})
driver.add_cookie({'name': 'BDUSS', 'value': 'bbbbbbbbbbb'})

sleep(2)
driver.refresh()
sleep(3)

driver.quit()

 

posted on 2019-02-22 21:24  lina2014  阅读(165)  评论(0编辑  收藏  举报

导航