文章目录

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

target

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

下拉选择框

css 里的option选择框

css

# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Firefox()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
url = 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()# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()

select 选择框,三种方法

  1. 下标访问
  2. value 值访问
  3. 显示文本切换
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.support.select import Selectdriver = webdriver.Firefox()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
url = 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广州")# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()

为什么使用select 类?
如果 option 选项没有 value 值的话, css 定位或者其他定位就不太方便

方法:

  1. 导包 :from selenium.webdriver.support.select import Select
  2. 实例化s = Select(element)
  3. 调用方法s.select_by_index()
    调用方法有三种:
    索引、value值、显示文本

注意

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

弹出框—— driver.switch_to.alert

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

  1. alert 警告框
  2. confirm 确认框
  3. prompt 提示框

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

需求:打开注册A.html页面,完成以下操作:
1).点击 alert 按钮
2).关闭警告框
3).输入用户名:admin
1. 按钮被点击后弹出警告框,而接下来输入用户名的语句没有生效
2. 什么问题导致的?
3. 如何处理警告框?
说明:Selenium中对处理弹出框的操作,有专用的处理方法;并且处理的方法都一样
1. 获取弹出框对象
alert = driver.switch_to.alert
2. 调用
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)
  1. JavaScript如何控制滚动条?—— js1 = "window.scrollTo(0,10000)"
  2. 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中操作其他页面,必须先回到默认页面,才能进一步操作

解决方法:

  1. 完成主页面注册信息;
  2. 调用frame切换方法(switch_to.frame(“myframe1”))切换到注册用户A框架中
  3. 调用恢复默认页面方法(switch_to.default_content())
  4. 调用frame切换方法(switch_to.frame(“myframe2”))切换到注册用户B框架中
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Firefox()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
# driver.implicitly_wait(30)
# 打开url
url = 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@qq.com")# 切换到注册A 使用name
# driver.switch_to.frame("myframe1")
# 使用id
driver.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@qq.com")# 切换到默认目录—— 因为 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@qq.com")# 暂停 2
sleep(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) --> 切换指定句柄窗口
  1. 获取‘注册实例.html’当前窗口句柄
  2. 点击‘注册实例.html’页面中注册A页面
  3. 获取所有窗口句柄
  4. 获取注册A页面对应的窗口句柄,并切换
  5. 操作注册A页面元素
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Firefox()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
# driver.implicitly_wait(30)
# 打开url
url = r"D:\web自动化素材\课堂素材\注册实例.html"
driver.get(url)"""目标: 切换窗口需求:1. 打开注册实例.html2. 点击 注册A网页3. 填写 注册A网页 内容"""# 获取当前窗口句柄  -->目的:判断只要不是当前主窗口句柄,就一定时新开的窗口句柄
current_handle = driver.current_window_handle
print("当前窗口句柄为:", current_handle)
# 点击注册A网页
driver.find_element_by_partial_link_text("A网页").click()# 获取所有窗口句柄
handles = driver.window_handles
print("所有窗口句柄:", 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@qq.com")# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()

总结;

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

截屏

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

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

# 导包
import time
from time import strftime
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Firefox()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
url = r"D:\web自动化素材\课堂素材\注册A.html"
driver.get(url)"""目标: 截屏方法:driver.get_screenshot_as_file()需求:1. 输入用户名2. 截图 当前目录下 admin.png
"""
# 输入 admin
driver.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")))# 暂停 2
sleep(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) --> 获取指定cookie
name:为cookie的名称
2. get_cookies() --> 获取本网站所有本地cookies
3. add_cookie(cookie_dict) --> 添加cookie
cookie_dict:一个字典对象,必选的键包括:"name" and "value"
需求:使用cookie实现跳过登录
1). 手动登录百度,获取cookie
2). 使用获取到的cookie,达到登录目的,然后就可以执行登录之后的操作BDUSS是登录百度后的唯一身份凭证(*.baidu.com),拿到BDUSS就等于拿到帐号的控制权,
通行贴吧、知道、百科、文库、空间、百度云等百度主要产品。
1. 登录baidu,登录成功后抓取 (BDUSS)
2. 使用add_cookie()方法,添加 (BDUSS)键和值
3. 调用刷新方法 driver.refresh()
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.add_cookie({'name':'BDUSS','value':'根据实际填写'})
time.sleep(3)
driver.refresh()
time.sleep(3)
driver.quit()

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

  1. bootstrap中轮播图、模态框、提示框/弹出框、滚动监听、弹性布局、响应式flex、多媒体对象

    轮播图: bootstrap封装了轮播图的功能,其具体如下: 类名 描述 .carousel 创建一个轮播图块的容器,实质是做布局用:且此容器应该有一个di属性,其属性值提供给下面左右按钮href锚点 ...

  2. Bootstrap—解决下拉菜单不弹出问题

    最近学到Bootstrap下拉菜单,学懂了教程内容之后自己敲一个点击按钮底下弹出下拉菜单的小demo,写完代码发现运行之后点击按钮没反应,下拉菜单弹不出来,对照教程感觉代码没错. 我的代码如下: &l ...

  3. 微信小程序简易实现模态框弹出框方法代码

    方法如下 介绍 wxml代码 Javacript代码 wxss样式 介绍 可以将showModal和hideModal内的方法交换从而改变弹出框方向,但要注意showModalStatus在两个函数内 ...

  4. python tkinter 下拉框_python中tkinter入门之Menu创建顶级菜单、下拉菜单和弹出菜单。...

    创建顶级菜单 Menu 组件通常被用于实现应用程序上的各种菜单.使用add_command可以添加菜单内容.创建后通过root.config()添加到窗口上. from tkinter import ...

  5. php tinyme_黄聪:TinyMCE 4 增强 添加样式、按钮、字体、下拉菜单和弹出式窗口

    我最喜欢 WordPress 3.9 的更新是使用了 TinyMCE 4.0 编辑器.新的 TinyMCE 看起来看起来更整洁(真正匹配WP仪表板),它有一些非常不错的附加功能.我的很多老主题和插件必 ...

  6. vue中实现模态框弹出框动画(旋转弹出)

    vue模态框弹窗动画 沃达尔 (Vodal) A Nice vue modal with animations. 带有动画的尼斯vue模态. 安装 npm i -S vodal 用法 <temp ...

  7. 【Java中的菜单的常用方法】下拉菜单和弹出菜单

    目录 Swing菜单组件 下拉式菜单 下拉式菜单的三个组件的详细讲解 下拉式菜单的创建与使用 创建和添加下拉式菜单的一般步骤 弹出式菜单 弹出式菜单的创建与使用 Swing菜单组件 下拉式菜单 创建一 ...

  8. 035-JAVA语言实现下拉菜单与弹出菜单功能

    上一章:034-用Swing组件综合应用(实现QQ登录与注册界面功能)_CSDN专家-赖老师(软件之家)的博客-CSDN博客 下一讲:036-JList列表控件使用案例讲解_CSDN专家-赖老师(软件 ...

  9. Android仿IOS封装通用的弹出框Dialog和底部弹出列表选择框 仿美团顶部条件筛选框 附自定义ViewGroup

    弹出框 背景 提示与询问弹出框 实现 使用 列表选择框 实现 使用 顶部条件筛选框 实现 自定义ViewGroup 使用 总结 背景 鉴于Android提供的默认弹出框很一般,IOS的弹出框样式还不错 ...

最新文章

  1. Acwing--朴素dijkstra
  2. 解决 Visual Studio 2017 RC 不兼容低版本 Visual Studio 创建的 MVC 4 项目的问题
  3. python php linux-选择PHP与Python,可以考虑这三个问题
  4. Docker-创建一个mysql容器,并保存为本地镜像
  5. 如何设置matlab和.m、.slx .mdl .p .mat等文件之间关联
  6. 夜神模拟器连不上 adb 问题解决方法
  7. 同一无线络下电脑会打不开个别的网站网页,而手机却可以打开。
  8. 2020华为外包机试题目
  9. 【论文笔记】Question Answering over Freebase with Multi-Column Convolutional Neural Networks
  10. linux数字音频播放器,Moode Audio Player数字音频播放系统的体验
  11. C/C++基础查漏补缺(八)----------寒假学习笔记(八)
  12. JavaScript中的name和classname有什么区别
  13. 5分钟完成核磁共振检查,Facebook的AI技术现在还经不住考验
  14. 状语从句不是简单句_英语简单句、从句分类及解析
  15. 小乌龟html5小游戏,晨会互动小游戏之《抓乌龟》
  16. 博途PLC 中位值滤波算法(FC功能块)
  17. 宽带技术大比拼(转)
  18. 外媒:英特尔计划拍卖8500项专利 包括部分5G蜂窝标准专利
  19. NR/5G ~ R16 DL SPS
  20. 【2018.05.07学习笔记】【linux基础知识10.6-10.10】

热门文章

  1. Python 教程:: 1. 课前甜点
  2. http和https的区别https的连接方式
  3. 利用Python求斐波那契数列的第N项以及前N项和(循环、递归、集合)
  4. 无刷电机-几种控制模式所需硬件接口
  5. excel怎么设置打印区域_excel打印区域页面设置
  6. 华为云迁移工具推荐最佳实践:KVM虚拟化迁移到华为云
  7. [面试] C++中的static关键字 (static 上镜率非常高!)
  8. 数据包如何正确的发到目的地_如何免费装修网店和上传宝贝-上海装修报价
  9. transform 、transition、animate动画
  10. html变成谷歌浏览器快捷方式,谷歌浏览器打开网页创建快捷方式的办法?