ActionChains类(鼠标操作)
常用于模拟鼠标的行为,比如单击、双击、拖拽等行为
click(on_element=None) --- 鼠标单击
double_click(on_element=None) --- 双击
context_click(on_element=None) --- 右击
click_and_hold(on_element=None) --- 鼠标单击并且按住不放
drag_and_drop(source,target) --- 拖拽
drag_and_drop_by_offset(source,xoffset,yoffset) --- 将目标拖动到指定的位置
key_down(value,element=None) --- 按下某个键盘上的键
key_up(value,element=None) --- 松开某个键
move_by_offset(xoffset,yoffset) --- 鼠标从当前位置移动到某个坐标
move_to_element(to_element) --- 鼠标移动到某个元素
move_to_element_with_offset(to_element,xoffset,yoffset)
--- 移动到距某个元素(左上角坐标)多少距离的位置
perform() --- 执行链中的所有动作
release(on_element=None) --- 在某个元素位置松开鼠标左
案例:
在京东首页,让光标悬停在“我的京东”上,随后点击“待处理订单”
from selenium import webdriver #导入selenium模块中的webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import *
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.jd.com/")
dx.maximize_window()
sleep(1)
wdjd=dx.find_element_by_xpath('//*[@id="ttbar-myjd"]/div[1]/a')#根据xpath寻找到“我的京东”
ActionChains(dx).move_to_element(wdjd).perform()#将光标悬停在“我的京东”上并点击
sleep(1)
dx.find_element_by_xpath('//*[@id="ttbar-myjd"]/div[2]/div[1]/div[1]/div[1]/a').click()
text 获取文本
(1)text 获取文本
from selenium.webdriver.common.action_chains import ActionChains
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
time.sleep(2)
sz=dx.find_element_by_id("s-usersetting-top").text
(2)if 判断文本是否正常
from selenium import webdriver #导入selenium模块中的webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
time.sleep(2)
sz=dx.find_element_by_id("s-usersetting-top").text
print(sz)
if sz=="设置":
print("ok")
else:
print("no")
title 标题
(1)重开窗口的标题都在第一个页面上

from selenium import webdriver #导入selenium模块中的webdriver
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
time.sleep(2)
print(dx.title)
w="window.open('https://www.baidu.com')"
dx.execute_script(w)
print(dx.title)
time.sleep(2)
w="window.open('https://www.jd.com')"
dx.execute_script(w)
print(dx.title)

(2)通过get 打开网页,覆盖的,标题就是打开的页面
from selenium import webdriver #导入selenium模块中的webdriver
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
time.sleep(2)
print(dx.title) #过期更新
dx.get("https://www.baidu.com")
print(dx.title) #百度一下,你就知道
time.sleep(2)
dx.get("https://www.jd.com")
print(dx.title) #京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!
assert 断言
assert判断:正确的通过,执行下一步,失败就报错


from selenium import webdriver #导入selenium模块中的webdriver
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
time.sleep(2)
print(dx.title) #过期更新
js=dx.title
assert js=="过期更新"
print("ok")
切换窗口
(1)当页面出现两个窗口,可以根据索引切换,索引位0,1
from selenium import webdriver #导入selenium模块中的webdriver
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
time.sleep(2)
print(dx.title) #过期更新
w="window.open('https://www.baidu.com')"
dx.execute_script(w)
print(dx.title) #过期更新
jb=dx.current_window_handle #获取当前句柄
print(jb) #CDwindow-B8A77F2921EDAA393A1436B9980D8CCB
jbs=dx.window_handles #获取所有句柄,返回一个列表
print(jbs) #['CDwindow-B8A77F2921EDAA393A1436B9980D8CCB', 'CDwindow-C9672C1FE1CB891043BF910930A4F819']
dx.switch_to.window(jbs[1]) #两个窗口索引 0,1
time.sleep(2)
dx.find_element_by_id("kw").send_keys(" 切换")
(2)当页面出现三个窗口,可以根据索引切换,索引位0,2,1
案例1:切换最后的页面
from selenium import webdriver #导入selenium模块中的webdriver
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
time.sleep(2)
print(dx.title) #过期更新
w="window.open('https://www.jd.com')"
dx.execute_script(w)
print(dx.title) #过期更新
w="window.open('https://www.baidu.com')"
dx.execute_script(w)
print(dx.title) #过期更新
jb=dx.current_window_handle #获取当前句柄
print(jb) #CDwindow-B8A77F2921EDAA393A1436B9980D8CCB
jbs=dx.window_handles #获取所有句柄,返回一个列表
print(jbs) #['CDwindow-B8A77F2921EDAA393A1436B9980D8CCB', 'CDwindow-C9672C1FE1CB891043BF910930A4F819']
dx.switch_to.window(jbs[1]) #两个窗口索引 0,1
time.sleep(2)
dx.find_element_by_id("kw").send_keys(" 切换")
案例2:
切换中间的窗口
from selenium import webdriver #导入selenium模块中的webdriver
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
time.sleep(2)
print(dx.title) #过期更新
w="window.open('https://www.jd.com')"
dx.execute_script(w)
print(dx.title) #过期更新
w="window.open('https://www.baidu.com')"
dx.execute_script(w)
print(dx.title) #过期更新
jb=dx.current_window_handle #获取当前句柄
print(jb) #CDwindow-B8A77F2921EDAA393A1436B9980D8CCB
jbs=dx.window_handles #获取所有句柄,返回一个列表
print(jbs) #['CDwindow-B8A77F2921EDAA393A1436B9980D8CCB', 'CDwindow-C9672C1FE1CB891043BF910930A4F819']
dx.switch_to.window(jbs[2]) #两个窗口索引 0,1
time.sleep(2)
dx.find_element_by_link_text("免费注册").click()
(3).通过for ,判断title 切换窗口
from selenium import webdriver #导入selenium模块中的webdriver
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
time.sleep(2)
print(dx.title) #过期更新
w="window.open('https://www.jd.com')"
dx.execute_script(w)
print(dx.title) #过期更新
w="window.open('https://www.baidu.com')"
dx.execute_script(w)
print(dx.title) #过期更新
jb=dx.current_window_handle #获取当前句柄
print(jb) #CDwindow-B8A77F2921EDAA393A1436B9980D8CCB
jbs=dx.window_handles #获取所有句柄,返回一个列表
print(jbs) #['CDwindow-B8A77F2921EDAA393A1436B9980D8CCB', 'CDwindow-C9672C1FE1CB891043BF910930A4F819']
for i in jbs:
dx.switch_to.window(i)
if "百度一下,你就知道" in dx.title:
break
print(dx.title)
dx.find_element_by_id("kw").send_keys("切换成功")

select 下拉框讲解
(1)下拉框案例


案例:
from selenium import webdriver #导入selenium模块中的webdriver
from selenium.webdriver.support.select import Select
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("file:///E:/dcs/two/selenium/select.html") #通过get打开页面
time.sleep(2)
wz=dx.find_element_by_id("dropdown")
# Select(wz).select_by_index(2) #通过索引来选择
# Select(wz).select_by_value("option2") #通过value来选择
Select(wz).select_by_visible_text("绍兴") # 通过text 文本来选择

alert弹框

链接:
file:///E:/dcs/two/selenium/%E5%BC%B9%E6%A1%86/alert%E5%BC%B9%E6%A1%86.html代码:
from selenium import webdriver #导入selenium模块中的webdriver
from selenium.webdriver.support.select import Select
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("file:///E:/dcs/two/selenium/%E5%BC%B9%E6%A1%86/alert%E5%BC%B9%E6%A1%86.html") #通过get打开页面
time.sleep(2)
tk=dx.switch_to.alert #切换到框内
tk.dismiss() # 取消
time.sleep(2)
tk.accept() #确认

确认性弹框
from selenium import webdriver #导入selenium模块中的webdriver
from selenium.webdriver.support.select import Select
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("file:///E:/dcs/two/selenium/%E5%BC%B9%E6%A1%86/enter.html")
time.sleep(2)
dx.find_element_by_class_name("alert").click() #点击确认按钮
time.sleep(2)
tk=dx.switch_to.alert #切换到框内
time.sleep(2)
tk.accept() #确认

输入性
from selenium import webdriver #导入selenium模块中的webdriver
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("file:///E:/dcs/two/selenium/%E5%BC%B9%E6%A1%86/prompt.html")
time.sleep(2)
dx.find_element_by_class_name("alert").click() #点击确认按钮
time.sleep(2)
tk=dx.switch_to.alert #切换到框内
tk.send_keys("dcs") #输入内容
time.sleep(2)
tk.accept() #确认

上传文件类型
from selenium import webdriver #导入selenium模块中的webdriver
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("file:///E:/dcs/two/selenium/%E5%BC%B9%E6%A1%86/upload_file.html")
time.sleep(2)
dx.find_element_by_id("file").send_keys(r"E:\az\ls\tttt.txt")

frame框京东的页面:

京东链接地址:

链接:https://smart.mail.163.com/login.htm?df=smart_android\&utm_source=email_mobile

代码:
from selenium import webdriver #导入selenium模块中的webdriver
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://graph.qq.com/oauth2.0/show?which=Login&display=pc&response_type=code&state=F0BE062356EAD84676C4CD60B26E2A8877AF3617BC5D527476899F1F50B0C789A2FD39C9BBE8F6311FFDA89EA89F9581&client_id=100273020&redirect_uri=https%3A%2F%2Fqq.jd.com%2Fnew%2Fqq%2Fcallback.action%3Fuuid%3D7831301c1cb641c6b81b35537bb966f7")
time.sleep(2)
wz=dx.find_element_by_id("ptlogin_iframe")
dx.switch_to.frame(wz)
time.sleep(2)
dx.find_element_by_link_text("密码登录").click()
time.sleep(2)
dx.switch_to.default_content() #退出框
time.sleep(2)
dx.find_element_by_link_text("服务协议").click()
滚动条
'window.scrollTo(0,2000)'

案例1:
from selenium import webdriver #导入selenium模块中的webdriver
from selenium.webdriver.support.select import Select
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.jd.com") #通过get打开页面
time.sleep(2)
js1='window.scrollTo(0,2000)' #0表示开始顶端 0,2000
dx.execute_script(js1)
time.sleep(2)
js2='window.scrollTo(0,0)' #0表示开始顶端
dx.execute_script(js2)

案例2:
from selenium import webdriver #导入selenium模块中的webdriver
from selenium.webdriver.support.select import Select
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.jd.com") #通过get打开页面
time.sleep(2)
js='var d=document.documentElement.scrollTop=2000'
dx.execute_script(js)
time.sleep(2)
js1='var d=document.documentElement.scrollTop=0'
dx.execute_script(js1)

案例3:滑动条进行循环加载
from selenium import webdriver #导入selenium模块中的webdriver
from selenium.webdriver.support.select import Select
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.jd.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
n=0
while n<=5000:
n+=1000
js='var d=document.documentElement.scrollTop='+str(n)
dx.execute_script(js)
time.sleep(2)
keys类(内容:复制,黏贴,剪切,全选,确认)
导入一个keys类
案例1
from selenium import webdriver #导入selenium模块中的webdriver
from selenium.webdriver.common.keys import Keys
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.find_element_by_id("kw").send_keys("dcs") #输入
time.sleep(2)
dx.find_element_by_id("kw").send_keys(Keys.CONTROL,"a") #全选
time.sleep(2)
dx.find_element_by_id("kw").send_keys(Keys.CONTROL,"x") #剪切
time.sleep(2)
dx.find_element_by_id("kw").send_keys(Keys.CONTROL,"v") #剪切
time.sleep(2)
dx.find_element_by_id("kw").send_keys(Keys.ENTER) # 确认
案例2
from selenium import webdriver #导入selenium模块中的webdriver
from selenium.webdriver.common.keys import Keys
import time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
def hs(wz,*dz):
dx.find_element_by_id(wz).send_keys(dz)
time.sleep(2)
if __name__ == '__main__':
hs("kw","dcs")
hs("kw", Keys.CONTROL,"a")
hs("kw", Keys.CONTROL, "x")
hs("kw", Keys.CONTROL, "v")
hs("kw", Keys.ENTER)

根据场景设计场景用例
1 .一条一条的自动化用例编写
(1)登录场景
(2)登录==用户管理
(3)登录==系统管理
(4)登录==退出
案例:
登录场景1
from selenium import webdriver #导入selenium模块中的webdriver
from time import *
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
sleep(2)
#输入账号
dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
# 输入密码
dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
#点击登录
dx.find_element_by_id('loginBtn').click()
案例2:登录==用户管理
#登录==用户管理
from selenium import webdriver #导入selenium模块中的webdriver
from time import *
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
sleep(2)
#输入账号
dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
# 输入密码
dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
#点击登录
dx.find_element_by_id('loginBtn').click()
sleep(2)
# 点击用户管理
dx.find_element_by_xpath('//*[@id="menu-user"]/dt/i').click()
案例3:登录==系统管理
#登录==系统管理
from selenium import webdriver #导入selenium模块中的webdriver
from time import *
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
sleep(2)
#输入账号
dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
# 输入密码
dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
#点击登录
dx.find_element_by_id('loginBtn').click()
sleep(2)
# 点击系统管理
dx.find_element_by_xpath('//*[@id="menu-system"]/dt/i').click()
案例4:
#登录==退出
from selenium import webdriver #导入selenium模块中的webdriver
from time import *
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
sleep(2)
#输入账号
dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
# 输入密码
dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
#点击登录
dx.find_element_by_id('loginBtn').click()
sleep(2)
#退出
dx.find_element_by_xpath("/html/body/header/span[2]/a/i").click()
封装用例(将用例放在每一个函数中)
from selenium import webdriver #导入selenium模块中的webdriver
from time import *
class Cms(object):
def __init__(self):
pass
def dl(self):
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
sleep(2)
#输入账号
dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
# 输入密码
dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
#点击登录
dx.find_element_by_id('loginBtn').click()
def yhgl(self):
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
sleep(2)
#输入账号
dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
# 输入密码
dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
#点击登录
dx.find_element_by_id('loginBtn').click()
sleep(2)
# 点击用户管理
dx.find_element_by_xpath('//*[@id="menu-user"]/dt/i').click()
def xtgl(self):
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
sleep(2)
#输入账号
dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
# 输入密码
dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
#点击登录
dx.find_element_by_id('loginBtn').click()
sleep(2)
# 点击系统管理
dx.find_element_by_xpath('//*[@id="menu-system"]/dt/i').click()
def quit(self):
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
sleep(2)
#输入账号
dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
# 输入密码
dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
#点击登录
dx.find_element_by_id('loginBtn').click()
sleep(2)
#退出
dx.find_element_by_xpath("/html/body/header/span[2]/a/i").click()
if __name__ == '__main__':
ldx=Cms()
# ldx.dl()
# ldx.yhgl()
# ldx.quit()
ldx.xtgl()
优化用例
from selenium import webdriver #导入selenium模块中的webdriver
from time import *
class Cms(object):
def __init__(self):
pass
def dl(self):
self.dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
self.dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
sleep(2)
#输入账号
self.dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
# 输入密码
self.dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
#点击登录
self.dx.find_element_by_id('loginBtn').click()
def yhgl(self):
self.dl() #调用登录
sleep(2)
# 点击用户管理
self.dx.find_element_by_xpath('//*[@id="menu-user"]/dt/i').click()
def xtgl(self):
self.dl()
# 点击系统管理
sleep(2)
self.dx.find_element_by_xpath('//*[@id="menu-system"]/dt/i').click()
def quit(self):
self.dl()
#退出
sleep(2)
self.dx.find_element_by_xpath("/html/body/header/span[2]/a/i").click()
if __name__ == '__main__':
ldx=Cms()
# ldx.dl()
# ldx.yhgl()
ldx.quit()
# ldx.xtgl()
将登录写在构造函数中
from selenium import webdriver #导入selenium模块中的webdriver
from time import *
class Cms(object):
def __init__(self):
self.dx = webdriver.Chrome() # 创建一个驱动谷歌浏览器的对象
self.dx.get("http://49.233.201.254:8080/cms/manage/login.do") # 通过get打开页面
sleep(2)
#输入账号
self.dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
# 输入密码
self.dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
#点击登录
self.dx.find_element_by_id('loginBtn').click()
def yhgl(self):
sleep(2)
# 点击用户管理
self.dx.find_element_by_xpath('//*[@id="menu-user"]/dt/i').click()
def xtgl(self):
# 点击系统管理
sleep(2)
self.dx.find_element_by_xpath('//*[@id="menu-system"]/dt/i').click()
def quit(self):
#退出
sleep(2)
self.dx.find_element_by_xpath("/html/body/header/span[2]/a/i").click()
if __name__ == '__main__':
ldx=Cms()
# ldx.yhgl()
# ldx.quit()
ldx.xtgl()