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

2301_82242990 2024-09-02 15:03:01 阅读 91

img

img

img

既有适合小白学习的零基础资料,也有适合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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。