一.下拉框选择
怎么操作?:
1.先定位下拉框元素,然后点击下拉框出现选项,定位对应的选项,然后点击选中
2.通过Select定位
首先导入模块:
from selenium.webdriver.support.select import Select
方法1).Select (元素).select_by_value(value值)
方法2).Select (元素).select_by_index(索引值)
方法3).Select (元素).select_by_text(文本值)
#导入模块
from selenium import webdriver
from selenium.webdriver.support.select import Select
#实例化
driver = webdriver.Chrome()
driver.get('file:///E:/31%E6%E5%AE%9E%E4%BE%8B.html')
# # 定位点击下拉框
# driver.find_element_by_id('select').click()
# # 点击选中对应的选项
# driver.find_element_by_css_selector('option[value="sh"]').click()
ele = driver.find_element_by_id('select')
select = Select(ele)
# 通过value值来选择下拉选项
select.select_by_value("gz")
# 通过索引值进行定位
select.select_by_index(3)
#通过values值进行定位
select.select_by_value('bj')
# 通过文本值进行定位
select.select_by_visible_text('上海')
二.滚动条处理
概念
1.滚动条操作:
在webdriver里面本身没有提供对滚动条的操作,但是提供了一个执行js脚本的方法,
因此可以通过js脚本来执行滚动条上下滑动
步骤:
1).准备js脚本
js = 'window.scrollTo.(x,y)' #左右滑动改变x轴,上下滑动改变y轴
2).使用webdriver的execute_script(js脚本)的方法执行js脚本实现滚动条操作
driver.excute_script(js)
2. 聚焦到某个元素位置:
1.定位需要聚焦的元素
ele = driver.find_element_by_id('alerta')
2.聚焦元素的js脚本
js = 'arguments[0].scrollIntoView();' #固定js脚本
3.执行脚本传入元素
driver.execute_script(js,ele)
#导入模块
from selenium import webdriver
import time
#实例化
driver = webdriver.Chrome()
driver.get('file:///E:/31%E6%E5%AE%9E%E4%BE%8B.html')
# js = 'window.scrollTo(0,1000)'
#
time.sleep(3)
#
# driver.execute_script(js)
# 聚焦到某个元素
# 定位需要聚焦的元素
ele = driver.find_element_by_id('alerta')
# 聚焦元素的js脚本
js = 'arguments[0].scrollIntoView();'
# 执行脚本传入元素
driver.execute_script(js,ele)
三.iframe操作
iframe是什么?
iframe是前端常用的一个标签,用于HTML页面的嵌套
会导致嵌套的页面元素能定位,但是实际上元素不在本页面
想要定位到iframe里面的元素,需要进行页面的切换
什么时候去使用切换的方法?
1.当你定位元素能够定位但是在selenium里面找不到元素的时候去判断是否因为 iframe嵌套引起
2.在F12 elements里面定位该元素,然后在下方绝对路径里面查看是否有 iframe frame
存在则需要进行页面的切换才能操作
怎么进行页面切换?
driver.switch_to.frame(name值或者id值)
driver.switch_to.frame(索引值) 索引从0开始
driver.switch_to.frame(定位的元素)
退出嵌套页面?
1.退出所有的嵌套页面
driver.switch_to.default_content()
2.只退出一层嵌套
driver.switch_to.parent_frame()
iframe场景的应用场景
1.登录
2.富文本编辑框
3.后台的菜单栏
#导入模块
from selenium import webdriver
import time
#实例化
driver = webdriver.Chrome()
driver.get('file:///E:/31%E6%E5%AE%9E%E4%BE%8B.html')
# 定位账号然后输入内容
driver.find_element_by_css_selector('input[id="user"]').send_keys('admin')
# 执行滚动到底部
js = 'window.scrollTo(0,1000)'
driver.execute_script(js)
time.sleep(2)
# 页面切换
# 通过frame的name切换页面
# driver.switch_to.frame('myframe1')
# 通过frame的id进行页面切换
# driver.switch_to.frame('idframe1')
# 通过frame的索引值切换 从0开始
# driver.switch_to.frame(0)
# 通过元素定位来切换
ele = driver.find_element_by_css_selector('iframe[id="idframe1"]')
driver.switch_to.frame(ele)
# 早期版本的方法,不建议使用
# driver.switch_to_frame()
# 定位账号A输入内容
driver.find_element_by_css_selector('input[id="userA"]').send_keys('adminA')
# 切换回默认页面,退出所有的嵌套
# driver.switch_to.default_content()
# 只退出一层嵌套
driver.switch_to.parent_frame()
driver.find_element_by_id('password').send_keys('123456')
四.多窗口切换
窗口切换:
在超链接标签(a)里面存在 target=_blank 的时候点击会打开一个新的页面
窗口句柄:
获取窗口句柄
driver.current_window_handle 获取当前页面(原页面)的句柄
driver.window_handles 获取所有页面的句柄,返回一个列表
切换窗口
driver.switch_to.window(句柄)
#导入模块
from selenium import webdriver
import time
#实例化
driver = webdriver.Chrome()
driver.get('file:///E:/31%E6%E5%AE%9E%E4%BE%8B.html')
# 获取当前句柄
current_handle = driver.current_window_handle
print(current_handle)
time.sleep(2)
driver.find_element_by_id("fw").click()
time.sleep(2)
# 当前句柄---原窗口句柄
print(driver.current_window_handle)
# 获取所有的页面句柄
print(driver.window_handles)
time.sleep(3)
# 切换回原页面
driver.switch_to.window(current_handle)
time.sleep(3)
# 通过索引获取句柄切换到新页面
driver.switch_to.window(driver.window_handles[1])
五.窗口切换
概念
窗口切换:
在超链接标签(a)里面存在 target=_blank 的时候点击会打开一个新的页面
语法
# 通过js脚本移除target属性
js = 'document.getElementById("fw").removeAttribute("target")'
driver.execute_script(js)
#导入模块
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('file:///E:/31%E6%E5%AE%9E%E4%BE%8B.html')
# 准备js脚本
js = 'document.getElementById("fw").removeAttribute("target")'
# 执行js脚本去掉target属性
driver.execute_script(js)
driver.find_element_by_id('fw').click()
time.sleep(3)
# 回到原页面
driver.back()
六.弹窗处理
概念
为什么要取消弹窗?
因为存在弹窗之后页面的元素无法操作
原生弹窗:
alert:只有一个确定按钮
confirm:有一个确定按钮,一个取消按钮
prompt:有一个输入框,一个确定按钮,一个取消按钮
语法
alert:
变量 = driver.switch_to.alert
变量.accept()
confirm:
变量 = driver.switch_to.alert
变量.accept() 点击确定
变量.dismiss() 点击取消
prompt:
变量 = driver.switch_to.alert
变量.accept() 点击确定
变量.dismiss() 点击取消
变量.send_keys(内容) 输入内容
都可以使用: 变量.text #获取弹窗的文字信息
自定义弹窗
#准备js脚本,把display设置为空
js = 'document.getElemetById(元素id).style.display="none"'
#执行脚本
driver.excute_script(js)
六.单选框
概念
在html代码里面 type是 radio 并且一组的单元 name属性值全部一样
语法
元素.is_selected() #判断元素是否选中
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('file:///E:/310%E6%BAE%9E%E4%BE%8B.html')
time.sleep(2)
li = driver.find_element_by_id('li')
# 是否选中
driver.find_element_by_id('jz').click()
print(li.is_selected())
time.sleep(3)
if li.is_selected():
pass
else:
li.click()
li.click()
time.sleep(10)
driver.quit()
七.多选框
概念
多选框是html代码里面 type属性是 checkbox,name属性相同
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('file:///E:/310%E6%BAE%9E%E4%BE%8B.html')
time.sleep(2)
li = driver.find_element_by_id('li')
# 是否选中
driver.find_element_by_id('jz').click()
print(li.is_selected())
time.sleep(3)
if li.is_selected():
pass
else:
li.click()
li.click()
time.sleep(10)
driver.quit()