企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## **一、下拉框** ``` 1.1 为什么单独使用下拉框? 1. 如果option选项没有value值的化,css定位或其他定位就不太方便。 1.2 如何使用select类 操作: 1.导包:from selenium.webdriver.support.select import Select 2.实例化:s=select(element) 3.调用方法:s.select_by_index() 1.3 提供哪些方法 1. select_by_index() #通过下标定位 2. gelect_by_value() #通过value值 3. gelect_by_visible_text() #显示文本 1.4 注意事项 1. 实例化select时,需要的参数为select标签元素 2. 调用select类下面的方法,是通过索引、value属性值、显示文本去控制,而不需要click事件 ``` <details> <summary>test01_css.py</summary> ``` # test01_css from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册实例.html") driver.maximize_window() driver.implicitly_wait(10) ''' 目标: 默认北京A 暂停2秒 1.定位 上海A 2.暂停2秒 3.定位 广州A ''' # 方法1:使用css定位 sleep(2) driver.find_element_by_css_selector("[value='sh']").click() sleep(2) driver.find_element_by_css_selector("[value='gz']").click() sleep(2) driver.quit() ``` </details> <br /> <details> <summary>test01_select.py</summary> ``` # test01_select from selenium import webdriver from time import sleep from selenium.webdriver.support.select import Select driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册实例.html") driver.maximize_window() driver.implicitly_wait(10) ''' 目标: 默认北京A 暂停2秒 1.定位 上海A 2.暂停2秒 3.定位 广州A 步骤: 1.导包 Select类 2.获取Select对象 匿名:Select(element).select_by_index() # 通过下标 实名:select = Select(element) 调用:select.select_by_index() 注意: 1.Select类是通过select标签来控制其下的option元素 2.element:只能是select标签 ''' # 方法2:使用Select完成 # 通过 下标形式访问 el = Select(driver.find_element_by_css_selector("#selectA")) el.select_by_index(1) sleep(2) el.select_by_index(2) # 通过 value值形式访问 sel = Select(el) sel.select_by_value("sh") sleep(2) sel.select_by_value("gz") # 通过 显示文本切换 sleep(2) Select(el).select_by_visible_text("A上海") sleep(2) Select(el).select_by_visible_text('A广州') sleep(2) driver.quit() ``` </details> <br /> <br /> ## **二、警告框** ``` 2.1 为什么要处理警告框? 如果页面由弹出框,不处理,接下来的将不奏效。 2.2 对话框类型 1. alert #警告框 2. confirm #确认框 3. prompt #提示框 2.3 如何处理 以上三种对话框,处理方法都一样。 步骤: 1.切换到对话框 方法:driver.switch_to.alert 2.处理对话框 alert.text # 获取文本 alert.accept() # 同意 alert.dismiss() # 取消 提示:无论以上哪个对话框,都可使用取消、同意,因为调用的是后台的事件,跟页面显示的按钮数量无关。 ``` <details> <summary>test03_alert.py</summary> ``` # test03_alert from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册实例.html") driver.maximize_window() driver.implicitly_wait(30) ''' 需求: 1.点击 alert按钮 2.输入用户名 admin ''' driver.find_element_by_css_selector("#alerta").click() driver.find_element_by_css_selector("#userA").send_keys("admin") sleep(2) driver.quit() ``` </details> <br /> **2.4 注意** ``` 1. driver.witch to.alert方法适合以上三种类型对话框,调用时没有括号 2. 获取文本的方法,调用时没有括号如:alert.text 3. 在项目中不是所有的小窗口都是以上三种对话框。 ``` <details> <summary>test04_alert处理.py</summary> ``` # test04_alert处理 from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册实例.html") driver.maximize_window() driver.implicitly_wait(30) ''' 需求: 1.点击 alert按钮 2.输入用户名 admin ''' driver.find_element_by_css_selector("#alerta").click() # 默认返回alert对话框对象 at = driver.switch_to.alert # 处理 对话框 # 同意 at.accept() # 获取文本 print("警告信息:", at.text) # 取消 at.dismiss() driver.find_element_by_css_selector("#userA").send_keys("admin") sleep(2) driver.quit() ``` </details> <br /> <br /> ## **三、滚动条** ``` 3.1 为什么要操作滚动条 在web自动化中有些特殊场景,如:滚动条拉倒最底层,指定按钮才可用。 3.2 如何操作 第一步:设置操作滚动条操作语句 如:js = "window.scrollTo(0,10000)" 0: 左边距-->水平滚动条 10000:上边距-->垂直滚动条 第二步:调用执行js方法,将设置js语句传入方法中 方法:driver.execute_script(js) 3.3 说明 在selenium中没有直接提供定位滚动条组件方法,但是它提供了执行js语句方法,可以通过js语句来控制滚动条操作。 ``` <details> <summary>test05_scrollTo.py</summary> ``` # test05_scrollTo from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册实例.html") driver.maximize_window() driver.implicitly_wait(30) ''' 目标:滚动条操作 需求: 1.启动暂停2秒 2.输滚动条拉到最底下 ''' # 1.设置js控制滚动条语句 js = "windows.scrollTo(0, 1000)" # 2.调用执行js语句方法 driver.execute_script(js) sleep(2) driver.quit() ``` </details> <br /> <br /> ## **四、切换frame表单** ``` 提示:常用的frame表单有两种:frame、iframe 4.1 为什么要切换? 当前主目录内没有iframe表单页面元素信息,不切换,找不到元素。 4.2 如何切换? 方法:driver.switch_to.frame("id\name\element") 4.3 为什么要回到主目录 iframe或frame只有在主目录才有相关元素信息,不回到主目录,切换语句会报错。 4.4 如何回到主目录 方法:driver.switch_to.default_content() 4.5 提示: 1.切换frame时,可以使用name、id、iframe元素 ``` <details> <summary>test07_iframe_switch_to.py</summary> ``` # test07_iframe_switch_to from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册实例.html") driver.maximize_window() driver.implicitly_wait(30) ''' 目标:为什么要切换frame表单 需求: 1.打开注册实例.html 2.填写主页面 页面信息 3.填写注册A 页面信息 4.填写注册B 页面信息 ''' '''填写主页面 页面信息''' driver.find_element_by_css_selector("#user").send_keys("admin") driver.find_element_by_css_selector("#password").send_keys("admin") driver.find_element_by_css_selector(".tel").send_keys("18611112222") driver.find_element_by_css_selector("#email").send_keys("123@qq.com") # 切换到注册A driver.switch_to.frame("myframe1") '''填写注册A 页面信息''' driver.find_element_by_css_selector("#userA").send_keys("admin") driver.find_element_by_css_selector("#passwordA").send_keys("admin") driver.find_element_by_css_selector(".telA").send_keys("18611112222") driver.find_element_by_css_selector("#emailA").send_keys("123@qq.com") # 切换到注册B 使用name # driver.switch_to.frame("myframe2") driver.switch_to.frame(driver.find_element_by_css_selector("[name='myframe2']")) '''填写注册B 页面信息''' driver.find_element_by_css_selector("#userB").send_keys("admin") driver.find_element_by_css_selector("#passwordB").send_keys("admin") driver.find_element_by_css_selector(".telB").send_keys("18611112222") driver.find_element_by_css_selector("#emailB").send_keys("123@qq.com") sleep(2) driver.quit() ``` </details> <br /> <br /> ## **五、多窗口切换** ``` 5.1为什么要切换多窗口? 页面存在多个窗口式,selenium默认焦点只会在主窗口上所有的元素,不切换窗口,无法操作除主窗口以外的窗口内元素。 5.2如何切换? 思路:获取要切换的窗口句柄,调用切换方法进行切换。 方法: 1. driver.current_window_handle # 获取当前主窗口句柄 2. driver.window_handles # 获取当前由driver启动所有窗口句柄 3. driver.switch_to.window(handle) # 切换窗口 步骤: 1. 获取当前窗口句柄 2. 点击链接启动另一个窗口 3. 获取当前所有窗口句柄 4. 遍历所有窗口句柄 5. 判断当前遍历的窗口句柄不等于当前窗口句柄 6. 切换窗口操作 ``` <details> <summary>test08_windows.py</summary> ``` # test08_windows from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册实例.html") driver.maximize_window() driver.implicitly_wait(30) ''' 目标:切换窗口 需求: 1.打开注册实例.html 2.点击 注册A网页 3.填写 注册A页面 内容 ''' # 获取当前窗口句柄 --> 目的:判断只要不是当前主窗口句柄,就一定是新开的窗口句柄 current_handle = driver.current_window_handle print("当前窗口句柄为:", current_handle) # 点击注册A网页 driver.find_element_by_link_text("A网页").click() # 获取所有窗口句柄 handles = driver.window_handles # 判断不是当前窗口句柄 for h in handles: if h !=current_handle: # 切换 driver.switch_to.window(h) '''填写主页面 页面信息''' driver.find_element_by_css_selector("#user").send_keys("admin") driver.find_element_by_css_selector("#password").send_keys("admin") driver.find_element_by_css_selector(".tel").send_keys("18611112222") driver.find_element_by_css_selector("#email").send_keys("123@qq.com") sleep(2) driver.quit() ``` </details> <br /> <br /> ## **六、截屏** ``` 应用场景:失败截图,让错误看的更直观 方法: driver.get_screenshot_as_file(imgepath) 参数: imagepath: 为图片要保存的目录地址及文件名称 如:当前目录 ./test.png 上一级目录 ../test.png 扩展: 1.多条用例执行失败,会产生多张图片,可以采用时间戳的形式,进去区分。 操作: driver.get_screenshot as_file("../image/%s.png"%(time.strftime("%Y_%m_%d %H_%M_%S"))) strftime:将时间转为字符事函数 注意: %Y_%m_%d %H_%M_%S:代表,年月日时分秒 ``` <details> <summary>test09_get_screenshot_as_file.py</summary> ``` # test09_get_screenshot_as_file from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("https://www.zhihu.com") driver.maximize_window() driver.implicitly_wait(10) ''' 目标:截屏 方法: driver.get_screenshot_as_file() 需求: 1.输入用户名 2.截图 当前目录下 admin.png ''' driver.get_screenshot_as_file("./admin.png") driver.get_screenshot_as_file("../image/zhihu.png") sleep(2) driver.quit() ``` </details> <br /> <br /> ## **七、验证码** ``` 7.1 什么是验证码? 一种随机生成信息(文字、数字、图片) 7.2 验证码作用 防止恶意请求 7.3 验证码处理方式 1. 去掉验证码(项目在测试环境、公司自己的项目) 2. 设置万能验证码(测试环境或线上环境,公司自己项目) 3. 使用验证码识别技术(由于现在的验证码千奇百怪,导致识别率太低) 4. 使用cookie解决(推荐) 7.4 cookie介绍: 生成:由服务器生成 作用:标识一次对话的状态(登录的状态) 使用:浏览器自动记录cookie,在下一条请求时将cookies信息自动附加请求 7.5 应用: 方法: 1. driver.get_cookies() # 获取所有的cookie 2. driver.add_cookies({字典}) #设置cookie 步骤: 1. 打开百度url driver.get("http://www.baidu.com") 2. 设置cookie信息:driver.add_cookie({"name":"BDUSS","value”:”根据实际情况编写”}) 3. 暂停2秒以上 4. 刷新操作 注意: 1. 以上百度BDUSS所需格式为百度网站特有,别的网站请自行测试。 2. 必须进行刷新操作。 ``` <details> <summary>test10_cookie.py</summary> ``` # test10_cookie from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("http://www.baidu.com") driver.maximize_window() driver.implicitly_wait(30) ''' 目标:cookie操作 案例: 使用cookie绕过百度登录 步骤: 1.手动登录百度网站 2.手动获取登录后的cookies 'BDUSS' 3.使用selenium内的add_cookie(name='BDUSS', value='xxx') ''' # 设置cookie driver.add_cookie({ "name": "BDUSS", "value": "FmZFpnbUx3blZvOGxsNnpoWWZuRXZIMVpPSGVxZ0JwQURJYTJueGpIckVNQ0pnRVFBQUFBJCQAAAAAAAAAAAEAAAAi869Ds8y99e7aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMSj-l~Eo~pfRU" }) # 获取所有的cookies信息 cookies = driver.get_cookies() print("cookies内容为:", cookies) sleep(2) driver.refresh() sleep(5) driver.quit() ``` </details> <br />