300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 4.下拉选择框 弹出框。滚动条 (frame切换 多窗口切换 很重要 常用)等等 面试重要

4.下拉选择框 弹出框。滚动条 (frame切换 多窗口切换 很重要 常用)等等 面试重要

时间:2020-05-18 04:21:39

相关推荐

4.下拉选择框 弹出框。滚动条 (frame切换 多窗口切换 很重要 常用)等等 面试重要

文章目录

target下拉选择框弹出框—— driver.switch_to.alert滚动条frame切换—— 重要多窗口切换截屏验证码cookie

target

下拉选择框——seleuim有专门的类弹出框滚动条操作frame 表单切换多窗口切换窗口截图验证码处理

下拉选择框

css 里的option选择框

css

# 导包from selenium import webdriverfrom time import sleep# 获取浏览器驱动对象driver = webdriver.Firefox()# 最大化浏览器driver.maximize_window()# 隐式等待driver.implicitly_wait(30)# 打开urlurl = r"D:\xxx"driver.get(url)"""目标: 默认北京A暂停2秒1. 定位 A上海2. 暂停2秒3. 定位 A广州""""""方式1:使用CSS定位"""sleep(2)# 使用css定位来操作 A上海driver.find_element_by_css_selector("[value='sh']").click()sleep(2)# 使用css定位 A广州driver.find_element_by_css_selector("[value='gz']").click()# 暂停 2sleep(2)# 关闭驱动对象driver.quit()

select 选择框,三种方法

下标访问value 值访问显示文本切换

# 导包from selenium import webdriverfrom time import sleep# 获取浏览器驱动对象from selenium.webdriver.support.select import Selectdriver = webdriver.Firefox()# 最大化浏览器driver.maximize_window()# 隐式等待driver.implicitly_wait(30)# 打开urlurl = r"D:\web自动化素材\课堂素材\注册A.html"driver.get(url)"""目标: 使用Select类实现操作option选项需求:暂停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 = driver.find_element_by_css_selector("#selectA")sleep(2)"""通过 下标形式访问"""# 切换 上海# Select(el).select_by_index(1)# sleep(2)# Select(el).select_by_index(2)"""通过 value值形式访问"""# 获取Select引用对象# 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广州")# 暂停 2sleep(2)# 关闭驱动对象driver.quit()

为什么使用select 类?

如果 option 选项没有 value 值的话, css 定位或者其他定位就不太方便

方法:

导包 :from selenium.webdriver.support.select import Select实例化s = Select(element)调用方法s.select_by_index()

调用方法有三种:

索引、value值、显示文本

注意

实例化 select 类的时候,需要参数为 select 标签元素调用Select 类下面的方法,是通过 索引 、value值、显示文本 来控制的,不需要click

弹出框—— driver.switch_to.alert

网页中常用的弹出框有三种

alert 警告框confirm 确认框prompt 提示框

弹出框不处理的话,接下来的操作就不会生效

需求:打开注册A.html页面,完成以下操作:1).点击 alert 按钮2).关闭警告框3).输入用户名:admin

1. 按钮被点击后弹出警告框,而接下来输入用户名的语句没有生效2. 什么问题导致的?3. 如何处理警告框?

说明:Selenium中对处理弹出框的操作,有专用的处理方法;并且处理的方法都一样1. 获取弹出框对象alert = driver.switch_to.alert2. 调用alert.text --> 返回alert/confirm/prompt中的文字信息alert.accept() --> 接受对话框选项alert.dismiss() --> 取消对话框选项

# 定位alerta按钮driver.find_element_by_id("alerta").click()# 获取警告框alert = driver.switch_to.alert# 注意:要打印弹出文本的话,需要在后面写上后续操作# 获取文本 ,没有括号# 打印警告框文本print(alert.text)# 接受警告框alert.accept()# 取消警告框# alert.dismiss()

滚动条

滚动条:一种可控制页面显示范围的组件

作用:

1. 在HTML页面中,由于前端技术框架的原因,页面元素为动态显示,元素根据滚动条的下拉而被加载

2. 页面注册同意条款,需要滚动条到最底层,才能点击同意

实现方式

说明:selenium中并没有直接提供操作滚动条的方法,但是它提供了可执行JavaScript脚本的方法,所以我们可以通过JavaScript脚本来达到操作滚动条的目的。

需求:打开注册页面A,暂停2秒后,滚动条拉到最底层

# 最底层# 第一步: 设置 js 控制滚动条语句 左边距 上边距# 第二部:调用执行 js 语句方法js1 = "window.scrollTo(0,10000)"driver.execute_script(js1)# 最顶层js2 = "window.scrollTo(0,0)"driver.execute_script(js2)

JavaScript如何控制滚动条?——js1 = "window.scrollTo(0,10000)"Selenium执行JavaScript脚本的方法?——driver.execute_script(js1)

frame切换—— 重要

常用的 frame 表单—— frame 和 iframe

不切换到话,当前主目录 没有 iframe 表单页面元素信息 ,不切换的话,找不到元素

frame:HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素;形式一:[了解]<frameset cols="25%,75%"><frame src="frame_a.htm"><frame src="frame_b.htm"></frameset>形式二:<iframe name="iframe_a" src="demo_iframe.htm" width="200" height="200"></iframe>

案例:打开‘注册实例.html’页面,完成以下操作1). 填写主页面的注册信息2). 填写注册页面A中的注册信息3). 填写注册页面B中的注册信息问题1. 当前页面内无法定位注册页面A和注册页

说明:在Selenium中封装了如何切换frame框架的方法方法:1). driver.switch_to.frame(frame_reference) --> 切换到指定frame的方法frame_reference:可以为frame框架的name、id或者定位到的frame元素2). driver.switch_to.default_content() --> 恢复默认页面方法在frame中操作其他页面,必须先回到默认页面,才能进一步操作

解决方法:

完成主页面注册信息;调用frame切换方法(switch_to.frame(“myframe1”))切换到注册用户A框架中调用恢复默认页面方法(switch_to.default_content())调用frame切换方法(switch_to.frame(“myframe2”))切换到注册用户B框架中

# 导包from selenium import webdriverfrom time import sleep# 获取浏览器驱动对象driver = webdriver.Firefox()# 最大化浏览器driver.maximize_window()# 隐式等待# driver.implicitly_wait(30)# 打开urlurl = r"xxx"driver.get(url)"""目标: 为什么要切换frame表单需求:1. 打开注册实例.html2. 填写主页面 页面信息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@")# 切换到注册A 使用name# driver.switch_to.frame("myframe1")# 使用iddriver.switch_to.frame("idframe1")"""填写注册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@")# 切换到默认目录—— 因为 A 页面,没有frame 表单,所以需要切换driver.switch_to.default_content()# 切换到注册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@")# 暂停 2sleep(2)# 关闭驱动对象driver.quit()

xx:

1.HTML中常用的frame框架——frame 和 iframe

2. 切换框架的方法——driver.switch_to.frame("idframe1")

3. 恢复到默认页面的方法——driver.switch_to.default_content()

4. 切换 frame 时 ,可以使用name id iframe 元素

多窗口切换

在HTML页面中,当点击超链接或者按钮时,有的会在新的窗口打开页面。

案例:

需求:打开 ‘注册实例.html’ 页面,完成以下操作

1). 点击 ‘注册A页面’ 链接

2). 在打开的页面中,填写注册信息

实现多窗口切换的方法:

三个:

说明:在Selenium中封装了获取当前窗口句柄、获取所有窗口句柄和切换到指定句柄窗口的方法;句柄:英文handle,窗口的唯一识别码方法:1). driver.current_window_handle --> 获取当前窗口句柄2). driver.window_handles --> 获取所有窗口句柄3). driver.switch_to.window(handle) --> 切换指定句柄窗口

获取‘注册实例.html’当前窗口句柄点击‘注册实例.html’页面中注册A页面获取所有窗口句柄获取注册A页面对应的窗口句柄,并切换操作注册A页面元素

# 导包from selenium import webdriverfrom time import sleep# 获取浏览器驱动对象driver = webdriver.Firefox()# 最大化浏览器driver.maximize_window()# 隐式等待# driver.implicitly_wait(30)# 打开urlurl = r"D:\web自动化素材\课堂素材\注册实例.html"driver.get(url)"""目标: 切换窗口需求:1. 打开注册实例.html2. 点击 注册A网页3. 填写 注册A网页 内容"""# 获取当前窗口句柄 -->目的:判断只要不是当前主窗口句柄,就一定时新开的窗口句柄current_handle = driver.current_window_handleprint("当前窗口句柄为:", current_handle)# 点击注册A网页driver.find_element_by_partial_link_text("A网页").click()# 获取所有窗口句柄handles = driver.window_handlesprint("所有窗口句柄:", handles)# 判断 不是 当前窗口句柄for h in handles:if h != current_handle:# 切换driver.switch_to.window(h)"""填写注册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@")# 暂停 2sleep(2)# 关闭驱动对象driver.quit()

总结;

什么是句柄?获取当前窗口句柄方法获取所有窗口句柄方法切换指 定句柄窗口方法

截屏

把当前操作的页面,截图保存到指定位置

窗口截图是因为,自动化脚本是由程序去执行的,有时候打印的错误信息并不是十分明确,如果在执行出错的时候对当前窗口截图保存,那么图片就可以直观的看到出错的原因

方法:driver.get_screenshot_as_file(imgpath)——imgpath 是图片保存的路径

# 导包import timefrom time import strftimefrom selenium import webdriverfrom time import sleep# 获取浏览器驱动对象driver = webdriver.Firefox()# 最大化浏览器driver.maximize_window()# 隐式等待driver.implicitly_wait(30)# 打开urlurl = r"D:\web自动化素材\课堂素材\注册A.html"driver.get(url)"""目标: 截屏方法:driver.get_screenshot_as_file()需求:1. 输入用户名2. 截图 当前目录下 admin.png"""# 输入 admindriver.find_element_by_css_selector("#userA").send_keys("admin")# 调用截图方法# driver.get_screenshot_as_file("./admin.png")# 存放指定目录# driver.get_screenshot_as_file("../scripts/admin02.png")# driver.get_screenshot_as_file("../image/admin.png")# 动态获取文件名称 使用时间戳# driver.get_screenshot_as_file("../image/%s.png"%(time.strftime("%Y_%m_%d %H_%M_%S")))# driver.get_screenshot_as_file("../image/%s.jpg"%(time.strftime("%Y_%m_%d %H_%M_%S")))driver.get_screenshot_as_file("../image/%s.jpg"%(strftime ("%Y_%m_%d %H_%M_%S")))# 暂停 2sleep(2)# 关闭驱动对象driver.quit()

验证码

一种随机生成的信息(数字、字母、汉字、图片、算术题)等为了防止恶意的请求行为,增加应用的安全性

学习验证码的目的:在Web应用中,大部分系统在用户登录注册的时候都要求输入验证码,而我们在设计自动化测试脚本的时候,

就需要面临处理验证码的问题。

面试问题:验证码处理方式:

答:说明:Selenium中并没有对验证码处理的方法,在这里我们介绍一下针对验证码的几种常用处理方式

方式:

1). 去掉验证码 (测试环境下-采用,公司自己的项目)

2). 设置万能验证码 (生产环境和测试环境下-采用)

3). 验证码识别技术 (通过Python-tesseract来识别图片类型验证码;识别率很难达到100%)

4). 记录cookie (通过记录cookie进行跳过登录)

cookie

1. Cookie是由Web服务器生成的,并且保存在用户浏览器上的小文本文件,它可以包含用户相关的信息。2. Cookie数据格式:键值对组成(python中的字典)3. Cookie产生:客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器颁发一个Cookie数据4. Cookie使用:当浏览器再次请求该网站时,浏览器把请求的数据和Cookie数据一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态。

cookie的应用场景

1. 实现会话跟踪,记录用户登录状态2. 实现记住密码和自动登录的功能3. 用户未登录的状态下,记录购物车中的商品

Selenium操作cookie

说明:Selenium中对cookie操作提供相应的方法

方法:

cookie 的返回结果是一个 列表

1. get_cookie(name) --> 获取指定cookiename:为cookie的名称2. get_cookies() --> 获取本网站所有本地cookies3. add_cookie(cookie_dict) --> 添加cookiecookie_dict:一个字典对象,必选的键包括:"name" and "value"

需求:使用cookie实现跳过登录1). 手动登录百度,获取cookie2). 使用获取到的cookie,达到登录目的,然后就可以执行登录之后的操作BDUSS是登录百度后的唯一身份凭证(*.),拿到BDUSS就等于拿到帐号的控制权,通行贴吧、知道、百科、文库、空间、百度云等百度主要产品。1. 登录baidu,登录成功后抓取 (BDUSS)2. 使用add_cookie()方法,添加 (BDUSS)键和值3. 调用刷新方法 driver.refresh()from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("")driver.add_cookie({'name':'BDUSS','value':'根据实际填写'})time.sleep(3)driver.refresh()time.sleep(3)driver.quit()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。