当前位置: 首页 > news >正文

Selenium-下拉选择框、弹出框、滚动条操作

Selenium-下拉选择框、弹出框、滚动条操作

  • 1、下拉选择框操作
    • 1.1 如何操作下拉选择框?
    • 1.2 Select类
    • 1.2.1 Select类实现步骤分析
  • 2、弹出框处理
  • 2.1 案例
    • 2.2 弹出框处理方法
    • 2.3 示例代码
  • 3、滚动条操作
    • 3.1 为什么要学习滚动条操作?
    • 3.2 实现方式
    • 3.3 案例
    • 3.4 滚动条拉到最低和最顶层

1、下拉选择框操作

说明:下拉框就是HTML中<select>元素

1.1 如何操作下拉选择框?

# 导包
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)


"""
    目标: 默认北京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()

========================================
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.support.select import Select

driver = 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()

1.2 Select类

说明:Select类是Selenium为操作select标签特殊封装的。 

实例化对象: select = Select(element)
		element: <select>标签对应的元素,通过元素定位方式获取, 
			例如:driver.find_element_by_id("selectA")

操作方法: 
	1. select_by_index(index) --> 根据option索引来定位,从0开始 
	2. select_by_value(value) --> 根据option属性 value值来定位 
	3. select_by_visible_text(text) --> 根据option显示文本来定位

1.2.1 Select类实现步骤分析

1. 导包 Select类 --> from selenium.webdriver.support.select import Select 
2. 实例化Select类 select = Select(driver.find_element_by_id("selectA")) 
3. 调用方法:select.select_by_index(index)


# 示例代码

#导包 from selenium.webdriver.support.select import Select 
select = Select(driver.find_element_by_id("selectA")) 
select.select_by_index(2) # 根据索引实现 
select.select_by_value("sh") # 根据value属性实现 
select.select_by_visible_text("A北京") # 根据文本内容实现

2、弹出框处理

网页中常用的弹出框有三种 
1. alert 警告框 
2. confirm 确认框 
3. prompt 提示框

2.1 案例

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

# 导包
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)

"""
    需求:
        1. 点击 alert按钮
        2. 输入用户名 admin
"""
# 定位 alert按钮 并 点击
driver.find_element_by_css_selector("#alerta").click()

# 切换 到alert
# 默认返回的alert对话框对象
at = driver.switch_to.alert

# 处理 对话框
# 同意
at.accept()

# 获取文本
# print("警告信息:", at.text)

# 取消
# at.dismiss()

# 定位 用户名 输入admin
driver.find_element_by_css_selector("#userA").send_keys("admin")

# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()



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

2.2 弹出框处理方法

说明:Selenium中对处理弹出框的操作,有专用的处理方法;并且处理的方法都一样 

1. 获取弹出框对象 
	alert = driver.switch_to.alert 
2. 调用 
	alert.text --> 返回alert/confirm/prompt中的文字信息 
	alert.accept() --> 接受对话框选项 
	alert.dismiss() --> 取消对话框选项

2.3 示例代码

# 定位alerta按钮 
driver.find_element_by_id("alerta").click() 
# 获取警告框 
alert = driver.switch_to.alert 
# 打印警告框文本 
print(alert.text) 
# 接受警告框 
alert.accept() 
# 取消警告框 
# alert.dismiss()

3、滚动条操作

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

3.1 为什么要学习滚动条操作?

1. 在HTML页面中,由于前端技术框架的原因,页面元素为动态显示,元素根据滚动条的下拉而被加载 
2. 页面注册同意条款,需要滚动条到最底层,才能点击同意

3.2 实现方式

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

1. 设置JavaScript脚本控制滚动条 
	js = "window.scrollTo(0,1000)" 
	(0:左边距;1000:上边距;单位像素) 
2. selenium调用执行JavaScript脚本的方法 
	driver.execute_script(js)

3.3 案例

# 导包
from selenium import webdriver
from time import sleep

# 获取浏览器驱动对象
driver = webdriver.Firefox()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
url = "https://www.baidu.com"
driver.get(url)

"""
    目标:滚动条操作

    需求:
    	1、打开百度,输入csdn并点击百度一下
        1. 启动暂停2秒
        2. 滚动条拉倒最底下
"""

driver.find_element_by_css_selector("#kw").send_keys("csdn")
driver.find_element_by_css_selector("#su").click()



sleep(2)
# 第一步 设置js控制滚动条语句
js = "window.scrollTo(0, 10000)"
# 第二步 调用执行js语句方法
driver.execute_script(js)

# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()

3.4 滚动条拉到最低和最顶层

# 最底层 
js1 = "window.scrollTo(0,10000)" 
driver.execute_script(js1) 
# 最顶层 
js2 = "window.scrollTo(0,0)" 
driver.execute_script(js2)

相关文章:

  • 机器学习算法——K近邻算法详解
  • 禁忌搜索算法TS求解TSP问题
  • Chapter 6 CNN(Convolutional Neural Network)
  • 网课题库接口搭建教程
  • 时代落在英伟达身上的是粒什么沙,国产GPU的机会又在哪?
  • 【软件测试】什么?这是最全的--金融行业测试类型细分,宝藏干G货......
  • c++学习笔记3_函数模板的使用并实现自己定义的队列
  • 进程地址空间
  • 接口与接口间怎样通过嵌套创造出新的接口?
  • HFCTF-2021-Final-easyflask
  • 神经网络系统技术是什么,神经网络系统技术应用
  • java+SpringBoot+HTML+Mysq基于微信小程序的大咖读书系统的设计与实现
  • 前端周刊第三十四期
  • Maven私服搭建与使用:nexus,repository,mirror,distributionManagement
  • ubuntu22.04安装Kubernetes1.25.0(k8s1.25.0)高可用集群
  • 【前端学习】-粗谈选择器
  • C语言笔记(第一章:C语言编程)
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Elasticsearch 参考指南(升级前重新索引)
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • linux学习笔记
  • nodejs调试方法
  • PAT A1050
  • Phpstorm怎样批量删除空行?
  • Quartz初级教程
  • Sass Day-01
  • SQLServer之创建显式事务
  • 创建一个Struts2项目maven 方式
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 基于 Babel 的 npm 包最小化设置
  • 入门到放弃node系列之Hello Word篇
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微服务入门【系列视频课程】
  • 在Mac OS X上安装 Ruby运行环境
  • 栈实现走出迷宫(C++)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • (LeetCode) T14. Longest Common Prefix
  • (pojstep1.1.2)2654(直叙式模拟)
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)可以带来幸福的一本书
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET单元测试
  • .NET上SQLite的连接
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [BZOJ] 2044: 三维导弹拦截
  • [CTO札记]盛大文学公司名称对联
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能
  • [halcon案例2] 足球场的提取和射影变换
  • [linux]centos7下解决yum install mysql-server没有可用包
  • [MRCTF2020]Ez_bypass1