WebDriver的工作原理及常用方法大全
2301_82242990 2024-09-02 15:03:01 阅读 91
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
需要这份系统化的资料的朋友,可以戳这里获取
post_data {“url”:“http://google.com”}
<code>
通过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](/uploads/2024/09/02/1725260585435085944.webp)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
1kQkv-1715886534132)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。