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://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网易邮箱
链接: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+=1000js='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):passdef 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):passdef 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()