# Selenium常见操作
* [演示网站](http://brtc.imsam.cn/1378009#_1)
* [打开网址 get()](http://brtc.imsam.cn/1378009#_get_8)
* [最大化窗口](http://brtc.imsam.cn/1378009#_9)
* [关闭浏览器](http://brtc.imsam.cn/1378009#_10)
* [点击 click()](http://brtc.imsam.cn/1378009#__click_28)
* [输入内容 send\_keys()](http://brtc.imsam.cn/1378009#_send_keys_29)
* [清空输入的内容 clear()](http://brtc.imsam.cn/1378009#_clear_60)
* [is\_displayed() 判断元素是否显示/可见](http://brtc.imsam.cn/1378009#is_displayed__79)
* [text 返回元素的文本](http://brtc.imsam.cn/1378009#text__105)
* [多表单切换](http://brtc.imsam.cn/1378009#_129)
* [隐式等待](http://brtc.imsam.cn/1378009#_165)
* [警告框 alert](http://brtc.imsam.cn/1378009#_alert_184)
* [下拉框元素定位](http://brtc.imsam.cn/1378009#_229)
* [send\_keys() 上传文件](http://brtc.imsam.cn/1378009#send_keys__278)
* [get\_attribute("属性") 获取属性对应值](http://brtc.imsam.cn/1378009#get_attribute__307)
* [鼠标悬停](http://brtc.imsam.cn/1378009#_329)
* [多窗口处理](http://brtc.imsam.cn/1378009#_361)
* [定位一组元素 find\_elements\_by\_xxx](http://brtc.imsam.cn/1378009#_find_elements_by_xxx_395)
* [JS定位](http://brtc.imsam.cn/1378009#JS_429)
* [JS定位](http://brtc.imsam.cn/1378009#JS_439)
> ### 演示网站
`http://OS-201804081018/blog/wp-login.php`
用户名:`test`
密码:`test123`
* [http://os-201804081018/test.html](http://os-201804081018/test.html)
> ### 打开网址 get()
>
> ### 最大化窗口
>
> ### 关闭浏览器
~~~
from selenium import webdriver
#打开谷歌浏览器,并且赋值给变量d
d = webdriver.Chrome()
d.maximize_window()# 最大化窗口
# 通过get() 打开一个网址
d.get('https://www.baidu.com')
# 关闭当前窗口
d.close()
# 关闭所有窗口,并且关闭驱动
d.quit()
~~~
> ### 点击 click()
>
> ### 输入内容 send\_keys()
~~~
from selenium import webdriver
from time import sleep
#打开谷歌浏览器,并且赋值给变量d
d = webdriver.Chrome()
d.maximize_window()# 最大化窗口
# 通过get() 打开一个网址
d.get('https://www.baidu.com')
sleep(2)
# 定位到hao123
# d.find_element_by_link_text('hao123').click()
d.find_element_by_partial_link_text('ao12').click()
sleep(2)
# 输入内容 send_keys()
d.find_element_by_name('word').send_keys('Python自动化')
sleep(2)
# 点击百度一下
d.find_element_by_class_name('submitInput').click()
sleep(2)
# 关闭当前窗口
d.close()
# 关闭所有窗口,并且关闭驱动
d.quit()
~~~
> ### 清空输入的内容 clear()
~~~
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.get('http://os-201804081018/blog/wp-login.php')
d.maximize_window()
sleep(2)
# 输入用户名
d.find_element_by_tag_name('input').send_keys('brtc')
sleep(1)
d.find_element_by_tag_name('input').send_keys('123456')
sleep(2)
# 清空内容 clear()
d.find_element_by_tag_name('input').clear()
~~~
> ### is\_displayed() 判断元素是否显示/可见
如果元素可见,则返回True,否则返回False
注意 :不管元素是否可见,我们都是可以定位到的。只是不可见的元素,我们是无法进行操作。
| 隐藏元素属性 |
| --- |
| type="hidden" |
| style="display:none" |
~~~
from selenium import webdriver
d = webdriver.Chrome()
d.get('http://os-201804081018/blog/wp-login.php')
result = d.find_element_by_css_selector('#wp-submit').is_displayed()
result2 = d.find_element_by_css_selector('[name="redirect_to"]').is_displayed()
print(result)
print(result2)
~~~
> ### text 返回元素的文本
使用`text`会返回元素的文本信息
~~~
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.get('http://os-201804081018/blog/wp-login.php')
# 登录系统
d.find_element_by_css_selector('#user_login').send_keys('test')
sleep(1)
d.find_element_by_css_selector('input[type="password"]').send_keys('te151254st123')
sleep(2)
d.find_element_by_css_selector('p.submit input#wp-submit').click()
sleep(1)
# 获取元素的文本信息
login_msg = d.find_element_by_css_selector('#login_error').text
print(login_msg)
~~~
> ### 多表单切换
* 切换表单`switch_to.frame()`
* 切换到最外层表单`switch_to.default_content()`
~~~
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.get('http://os-201804081018/test.html')
# 需要切换到的表单
frame_ele = d.find_element_by_css_selector('#fr_1')
# 切换表单
d.switch_to.frame(frame_ele)
sleep(1)
d.find_element_by_css_selector('[name="kw"]').send_keys('随便输入一些内容')
sleep(1)
# 切换到最外层表单
d.switch_to.default_content()
sleep(1)
d.find_element_by_css_selector('.btn').click()
sleep(1)
d.close()
d.quit()
~~~
> ### 隐式等待
`implicitly_wait(n)`n为秒数
隐式等待,是通过一定的时长等待页面的某个元素加载完成。如果超出了设置的时长,元素还没有被加载出来,则抛出异常。
~~~
from selenium import webdriver
d = webdriver.Chrome()
d.implicitly_wait(10)#等待十秒加载不出来就会抛出异常,10秒内加载出来正常返回
d.get('https://www.zhihu.com/explore')
d.find_element_by_class_name('zu-top-add-question')
~~~
> ### 警告框 alert
* switch\_to.alert.accept()
* switch\_to.alert.dismiss()
* switch\_to.alert.text
~~~
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.maximize_window()
# 隐式等待
d.implicitly_wait(10)
d.get('http://os-201804081018/test.html')
sleep(3)
d.find_element_by_css_selector('#Button1').click()
sleep(1)
# 处理警告框 switch_to.alert
# 确定警告框 accept()
# 取消警告框 dismiss()
# 获取警告框文本信息
msg = d.switch_to.alert.text
print(msg)
# 确定警告框 accept()
d.switch_to.alert.accept()
d.find_element_by_css_selector('#Button1').click()
sleep(1)
# 取消警告框 dismiss()
d.switch_to.alert.dismiss()
sleep(1)
d.close()
d.quit()
~~~
> ### 下拉框元素定位
* 通用处理方法:先点击下拉框,再点击下拉框的选项
* 针对select标签的下拉框,selenium提供了一套解决方案
需要先导包`from selenium.webdriver.support.ui import Select`
语法:
~~~
Select(下拉框元素定位).select_by_index(下标)#根据下标选择
Select(下拉框元素定位).select_by_visible_text('文本信息')#根据文本选择
Select(下拉框元素定位).select_by_value('value的值')# 根据value的值来选择
~~~
示例:
~~~
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import Select#解决select标签下拉框
d = webdriver.Chrome()
d.maximize_window()
# 隐式等待
d.implicitly_wait(10)
d.get('http://os-201804081018/test.html')
sleep(3)
# 先定位到下拉框
sel_ele = d.find_element_by_css_selector('#s1')
# 根据下标选择
Select(sel_ele).select_by_index(2)
sleep(3)
#根据文本选择
Select(sel_ele).select_by_visible_text('自动化持续集成')
sleep(3)
# 根据value的值来选择
Select(sel_ele).select_by_value('brtc1')
sleep(3)
d.close()
d.quit()
~~~
> ### send\_keys() 上传文件
只针对input标签的上传文件
~~~
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.maximize_window()
# 隐式等待
d.implicitly_wait(10)
d.get('http://www.baidu.com')
sleep(3)
d.find_element_by_css_selector('.soutu-btn').click()
sleep(3)
# 定位到文件上传的按钮,直接send_keys('文件的路径')
d.find_element_by_css_selector('.upload-pic').send_keys(R'D:\zhifubao.png')
sleep(3)
d.close()
d.quit()
~~~
> ### get\_attribute("属性") 获取属性对应值
根据属性名称获取对应值
~~~
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.maximize_window()
d.get('http://os-201804081018/blog/wp-login.php')
sleep(3)
username_type = d.find_element_by_css_selector('#user_login').get_attribute('type')
print(username_type)
sleep(3)
d.close()
d.quit()
~~~
> ### 鼠标悬停
使用该方法,首先要把ActionChains类导进来,引入ActionChains类的方法如下:
`from selenium.webdriver import ActionChains`
语法:
`ActionChains(浏览器).move_to_element(需要悬停的元素).perform()`
~~~
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains#鼠标悬停需要先导包
#打开谷歌浏览器,并且赋值给变量d
d = webdriver.Chrome()
d.maximize_window()# 最大化窗口
# 通过get() 打开一个网址
d.get('https://www.baidu.com')
sleep(2)
# 先定位到需要悬停的元素
mte = d.find_element_by_link_text('设置')
# 鼠标悬停
# 语法: ActionChains(浏览器).move_to_element(需要悬停的元素).perform()
ActionChains(d).move_to_element(mte).perform()
~~~
> ### 多窗口处理
如果遇到多窗口处理,我们就要切换窗口了。
`window_handles`获取所有窗口,以列表的形式返回
`switch_to.window()`切换窗口
~~~
from selenium import webdriver
from time import sleep
#打开谷歌浏览器,并且赋值给变量d
d = webdriver.Chrome()
d.maximize_window()# 最大化窗口
d.get('https://www.jianshu.com/')
sleep(1)
d.find_element_by_css_selector('#q').send_keys('python3')
d.find_element_by_css_selector('.ic-search').click()
# 获取所有窗口window_handles 会以列表返回所有窗口
all_windows = d.window_handles
print(all_windows)
# 使用switch_to.window()
d.switch_to.window(all_windows[1])
sleep(3)
d.find_element_by_css_selector('#q').clear()
sleep(5)
~~~
> ### 定位一组元素 find\_elements\_by\_xxx
find\_elements可以找到所有符合规则的元素,并且以列表的形式返回。
~~~
from selenium import webdriver
from time import sleep
#打开谷歌浏览器,并且赋值给变量d
d = webdriver.Chrome()
d.maximize_window()# 最大化窗口
d.get('http://os-201804081018/blog/wp-login.php')
# 登录系统
d.find_element_by_css_selector('#user_login').send_keys('test')
sleep(1)
d.find_element_by_css_selector('input[type="password"]').send_keys('test123')
sleep(2)
d.find_element_by_css_selector('p.submit input#wp-submit').click()
sleep(1)
d.find_element_by_css_selector('#menu-users .wp-menu-name').click()
sleep(3)
# find_elements... 定位一组元素,所有拥有该属性的都定位到,以列表的方式返回
all_user = d.find_elements_by_css_selector('[name="users[]"]')
for i in range(0,5,2):
all_user[i].click()
sleep(0.5)
~~~
> ### JS定位
在selenium中执行JavaScript语句需要使用`execute_script(js语句)`来执行
~~~
window.scrollTo(a,b);
document.querySelector('CSS表达式').removeAttribute('需要移除的属性名称');
document.querySelectorAll('CSS表达式')[下标].removeAttribute('移除的属性名称');
~~~
> ### JS定位
在selenium中执行JavaScript语句需要使用`execute_script(js语句)`来执行
~~~
window.scrollTo(0,b);
~~~
滚动条JS语句`window.scrollTo(0,b);`
* b 表示滚动条与顶部距离
~~~
from selenium import webdriver
from time import sleep
#打开谷歌浏览器,并且赋值给变量d
d = webdriver.Chrome()
d.maximize_window()# 最大化窗口
d.get('https://www.jianshu.com/')
sleep(1)
# 把滚动条往下拉到300的距离
js = "window.scrollTo(0,300);"
# 执行js语句
d.execute_script(js)
sleep(2)
# 把滚动条往下拉到3000的距离
js2 = "window.scrollTo(0,3000);"
# 执行js语句
d.execute_script(js2)
sleep(2)
# 把滚动条往下拉到0的距离
js3 = "window.scrollTo(0,0);"
# 执行js语句
d.execute_script(js3)
sleep(2)
~~~
* 定位一个元素,然后取出某个属性
~~~
document.querySelector('CSS表达式').removeAttribute('需要移除的属性名称');
~~~
~~~
from selenium import webdriver
from time import sleep
#打开谷歌浏览器,并且赋值给变量d
d = webdriver.Chrome()
d.maximize_window()# 最大化窗口
d.get('http://os-201804081018/test.html')
sleep(1)
js = "document.querySelector('#s3').removeAttribute('style');"
d.execute_script(js)
~~~
* 定位一组元素,通过下标,来确定
~~~
document.querySelectorAll('CSS表达式')[下标].removeAttribute('移除的属性名称');
~~~
~~~
#coding=utf-8
# @Author: SamWang
# @Date: 2019-11-14 10:54:44
# @Last Modified time: 2019-11-15 12:02:25
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.get('http://os-201804081018/blog/wp-login.php')
d.maximize_window()
sleep(1)
# 登录系统
d.find_element_by_css_selector('#user_login').send_keys('test')
sleep(1)
d.find_element_by_css_selector('input[type="password"]').send_keys('test123')
sleep(1)
d.find_element_by_css_selector('p.submit input#wp-submit').click()
sleep(1)
d.get('http://os-201804081018/blog/wp-admin/users.php')
sleep(1)
js = '''document.querySelectorAll('[name="users[]"]')[1].removeAttribute('type');'''
d.execute_script(js)
~~~
- 总章
- Oracle数据库
- 常见的Linux命令
- 理论内容整理
- 给你如下功能怎么测试
- 支付怎么测试
- 购物车怎么测试?
- 搜索功能怎么测试?
- 文件上传功能怎么测试?
- 登录功能怎么测试?
- 还款功能怎么测试?
- 订单功能怎么测试?
- 自动化测试篇
- 必记代码
- 接口测试篇
- 性能测试篇
- app测试篇
- 面试篇
- 项目篇
- 职业素养篇
- 真实案列分析
- 如何预防冷场
- redis
- 琪琪
- 禅道搭建手册
- 禅道搭建手册1
- 禅道的基本使用
- 基于Python3_Selenium的自动化
- Python3安装
- Python3基础
- 列表_元组_集合
- 函数_模块_类
- Python代码
- selenium环境
- selenium定位方式
- Selenium常见操作
- toast读取代码
- 添加用户代码
- 隐式等待与显式等待
- 循环添加用户
- 测试用例练习
- 测试用例优化
- Fiddler抓包工具
- 安装
- Fiddler使用
- 接口测试
- Jmeter的安装
- Jmeter使用
- jmeter+ant+jenkins接口自动化测试框架
- 接口安全测试
- 性能测试
- Nmon监控LInux系统
- Jmeter分布式
- 性能测试-具体案例
- Monkey
- 安装1
- Monkey使用
- appium自动化
- appium的安装
- appium基本使用
- 真机USB连接
- 问题排查
- Jenkins持续集成
- Jenkins安装
- Jenkins配置任务
- Python扩展内容
- Python连接数据库
- Python进行接口测试
- 开启服务