WebDriver的工作原理及常用方法大全

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

post_data {“url”:“http://google.com”}


通过post的方式请求localhost:port/hub/session/session\_id/url地址,请求浏览器完成跳转url的操作。


如果上述请求是可接受的,或者说Web Service是实现了这个接口,那么Web Service会跳转到该post data包含的url,并返回如下的



response
{“name”:“get”,“sessionId”:“285b12e4-2b8a-4fe6-90e1-c35cba245956”,“status”:0,“value”:“”}


该response中包含如下信息 name:Web Service端的实现的方法的名称,这里是get,表示跳转到指定url;sessionId:当前session的id;status:请求执行的状态码,非0表示未正确执行,这里是0,表示一切ok不必担心;value:请求的返回值,这里返回值为空,如果client调用title接口,则该值应该是当前页面的title;


如果client发送的请求是定位某个特定的页面元素,则response的返回值可能是这样的:



{“name”:“findElement”,“sessionId”:“285b12e4-2b8a-4fe6-90e1-c35cba245956”,“status”:0,“value”:{“ELEMENT”:“{2192893e-f260-44c4-bdf6-7aad3c919739}”}}


name,sessionId,status跟上面的例子是差不多的,区别是该请求的返回值是ELEMENT:{2192893e- f260-44c4-bdf6-7aad3c919739},表示定位到元素的id,通过该id,client可以发送如click之类的请求与 server端进行交互。


### WebDriver的常用方法


日常操作



from selenium import webdriver
from time import sleep

创建谷歌浏览器对象

chrome_driver = webdriver.Chrome()

访问百度

chrome_driver.get(“http://www.baidu.com”)

最大化窗口

chrome_driver.maximize_window()

访问柠檬班

chrome_driver.get(“https://lemon.ke.qq.com/”)

后退

chrome_driver.back()

前进,要有历史记录

chrome_driver.forward()

刷新

chrome_driver.refresh()

等待10s,更明显看出效果

sleep(10)

关闭窗口,关闭当前窗口

chrome_driver.close()

等待10s,更明显看出效果

sleep(10)

关闭会话,关闭浏览器,关闭driver

chrome_driver.quit()


鼠标事件



from selenium import webdriver

引入 ActionChains 类

from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome() driver.get(“https://www.baidu.cn”)

定位到要悬停的元素

above = driver.find_element_by_link_text(“设置”) # 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()
‘’’
perform(): 执行操作
context_click(): 右击;
double_click(): 双击;
drag_and_drop(): 拖动;
move_to_element(): 鼠标悬停
‘’’


键盘事件



from selenium import webdriver

引入 Keys 模块

from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome ()
driver.get(“http://www.baidu.com”)
#输入框输入内容
driver.find_element_by_id (“kw”).send_keys(“seleniumm”)
#删除多输入的一个m
driver.find_element_by_id (“kw”).send_keys(Keys.BACK_SPACE)
‘’’
删除键(BackSpace)send_keys(Keys.BACK_SPACE)
空格键 (Space)send_keys(Keys.SPACE)
制表键(Tab) send_keys(Keys.TAB)
回退键(Esc)send_keys(Keys.ESCAPE)
回车键(Enter)send_keys(Keys.ENTER)
全选(Ctrl+A)send_keys(Keys.CONTROL,‘a’)
复制(Ctrl+C)send_keys(Keys.CONTROL,‘c’)
剪切(Ctrl+X)send_keys(Keys.CONTROL,‘x’)
粘贴(Ctrl+V)send_keys(Keys.CONTROL,‘v’)
键盘 F1 send_keys(Keys.F1)
键盘 F12send_keys(Keys.F12)
‘’’


上传文件



driver.find_element_by_id(“albumUpload”).send_keys(“文件路径”)
#通过模拟键盘敲击上传
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import win32com.client # python -m pip install pypiwin32

ActionChains(driver).click(driver.find_element_by_id(“albumUpload”)).perform()
sh = win32com.client.Dispatch(“WScript.shell”)
time.sleep(3)

1、代码不联想 2、输入法要保持英文输入状态 3、无法处理中文

sh.Sendkeys(“文件路径\r\n”)
‘’’
上传多个文件
通过输入文件路径上传
“文件1路径\n文件2路径”
通过模拟键盘上传
‘“文件1路径” “文件2路径\r\n”’
‘’’


内嵌网页iframe切换



定位到内嵌网页

ele = driver.find_element_by_css_selector(“[class=“ke-edit-iframe”]”)

切入内嵌网页中

driver.switch_to.frame(ele)
driver.find_element_by_css_selector(“[class=“ke-content”]”).send_keys(“123”)

切入内嵌网页后,若想再操作内嵌网页外的元素,需要再切出来

driver.switch_to.default_content()


浏览器标签页切换



win_sli = driver.window_handles # 获取当前所有标签页的句柄

循环所有标签,直到找到标题、url、页面元素相符的标签,就停止切换,停留在当前标签页

for win in win_sli:
driver.switch_to.window(win)
# 如果标签页的标题不固定,还可以用网址判断
# 如果网址和标题都不固定,可以找一个目标标签页独有的元素,然后判断元素是否存在
if driver.title == “OPMS-项目管理软件+OA管理软件+CRM管理软件”:
break
‘’’
current_window_handle:获得当前标签页句柄
window_handles:返回所有便签页的句柄
switch_to.window(标签页句柄):切换到对应的标签页
关闭标签页使用 close 方法
‘’’


页面滚动



driver.execute_script(“window.scrollBy(0,500)”)
driver.execute_script(“arguments[0].scrollIntoView();”, ele)
‘’’
window.scrollBy(0,500) 向下滚动500个像素
window.scrollBy(0,-500) 向上滚动500个像素
window.scrollBy(500,0) 向右滚动500个像素
window.scrollBy(-500,0) 向左滚动500个像素
‘’’


截图



截图,截取全屏,参数为要保存图片的文件路径,官方建议用png格式

如果想截取登陆以后的界面:1、sleep 2、寻找一个登录后才有的元素

driver.get_screenshot_as_file(“./a.png”)

对元素进行截图

ele = driver.find_element_by_css_selector(“[class=“nav nav-pills nav-stacked custom-nav js-left-nav”]”)
ele.screenshot(“./b.png”)


警告框处理



获取对话框对象

al = driver.switch_to.alert

确认对话框

al.accept()
‘’’
text:返回 alert/confirm/prompt 中的文字信息
accept():接受现有警告框
dismiss():取消现有警告框
send_keys(“haha”):发送文本至警告框
‘’’




![img](https://img-blog.csdnimg.cn/img_convert/31f47201186b0c19e7e97b9ebb323ba1.png)
![img](https://img-blog.csdnimg.cn/img_convert/76287c8c5acaeadeaaf08779f378b5ca.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

1kQkv-1715886534132)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值