Selenium

1. 对话框操作

1.1 alter 提示对话框

# 定位按钮
driver.find_element_by_id("button1").click()
time.sleep(2)
# 要从网页上 切换到 对话框上
txt = driver.switch_to.alert.text
print(txt)
time.sleep(2)
# 点击对话框的确认按钮
driver.switch_to.alert.accept()

1.2 取消

# 定位按钮
driver.find_element_by_id("button1").click()
time.sleep(2)
# 要从网页上 切换到 对话框上
txt = driver.switch_to.alert.text
print(txt)
time.sleep(2)
# 点击对话框的取消按钮
driver.switch_to.alert.dismiss()

注:确认对话框多了一个取消按钮dismiss()

1.3 对话框处理

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

# 2.弹出框的处理
	遇到弹出框, 需要从原有页面切换至弹出上, 再进行操作.
    
# 3.常用方法:
    obj.text  # 获取弹出框文本
    obj.accept()  # 确定
    obj.dismiss()  # 取消

2. frame嵌套

默认我们可以在一个页面中 展示另外一个页面的内容,这个需要借助于框架标签iframe 来实现

<body>
	<h1>主页</h1>
	<div>
		<iframe src="index.html"></iframe>
	</div>
	<div>
		<iframe src="news.html"></iframe>
	</div>
</body>

主页中就展示了两个其他的页面,一个是首页、一个是新闻页

这个时候吗,如果我们想直接定位 首页中的 元素是拿不到的。

如何拿到呢?

driver.get("http://127.0.0.1:8020/Day01/home.html")

# 切换到某个frame中  这里切换可以根据 下标 id name等等
driver.switch_to.frame(0)

# 我们切换到frame这个框架 后 就可以直接 通过driver来定位 该frame中的元素
driver.find_element_by_id("username").send_keys("张三")

2.1 从主页 切换到子页1

driver.get("http://127.0.0.1:8020/Day01/home.html")

driver.switch_to.frame("iframe1")

# 我们切换到frame这个框架 后 就可以直接 通过driver来定位 该frame中的元素
driver.find_element_by_id("username").send_keys("张三")

2.2 从子页1切到子页2

默认是不能从一个子页 切换到另外一个子页的,需要先从子页退出到主页,在从主页切换到其他子页

# 退出 frame 回到主页
driver.switch_to.default_content()
# 切换到第2个子页
driver.switch_to.frame("iframe2")
t = driver.find_element_by_id("h11").text
print(t)

3. 窗口切换

3.1. 介绍

我们一个浏览器 可以有多个窗口,我们可以实现多window窗口切换。

我们的每一个窗口都有一个唯一的标识,可以通过标识来找到该窗口。

我们称这个标识为 句柄。

常用方法:

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

3.2.案例

如果我们从窗口1 超链接打开了窗口2

则句柄默认不会自动切换到窗口2,需要我们手动切换

# 定位北京超链接
driver.find_element_by_id("beijing").click()
# 切换句柄 到 我们的beijing窗口
driver.switch_to.window(driver.window_handles[1])

同意道理,从窗口2 打开了窗口3 ,则句柄也要响应的代码切换

driver.find_element_by_id("baidu").click()
# 切换到 百度窗口
driver.switch_to.window(driver.window_handles[2])

4.下拉框

4.1 下拉框处理

# 1.操作方法: 
	(1).select_by_index(index) --> 根据option索引来定位,从0开始 
	(2).select_by_value(value) --> 根据option属性value值来定位 
	(3).select_by_visible_text(text) --> 根据option显示文本来定位 
# 2.示例代码:
# 导包 
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北京") # 根据文本内容实现

5. 滚动条处理

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

# 2.实现方式
(1).说明:selenium中并没有直接提供操作滚动条的方法,但是它提供了可执行JavaScript脚本
的方法,所以我们可以通过JavaScript脚本来达到操作滚动条的目的。
(2).设置JavaScript脚本控制滚动条 
	js = "window.scrollTo(0,1000)" 
	(0:左边距;1000:上边距;单位像素) 
原文地址:https://www.cnblogs.com/yimeng123/p/15264764.html