1. selenium鼠标、键盘操作
ActionChains类中封装了对 鼠标事件 操作的方法,常见方法有:
- context_click() 右击 --> 此方法模拟鼠标右键效果
- double_click() 双击 --> 此方法模拟鼠标双击效果
- drag_and_drop() 拖动 --> 此方法模拟鼠标拖动效果
- move_to_element() 悬停 --> 此方法模拟鼠标悬停效果
- perform() 执行 --> 此方法用来执行封装在ActionChains的行为
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 定位“更多”的位置
element = driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[3]/div/a')
# 将鼠标移动到该位置
ActionChains(driver).move_to_element(element).perform()
sleep(3)
driver.quit()
Keys中封装了 键盘 上的按键或者组合键的字段,sendkeys()方法可以用来模拟键盘输入,除此之外还可以使用sendkeys方法发送文件到服务器(上传功能以input标签实现),常见的键盘事件操作有:
- send_keys(Keys.Back_SPACE):删除键
- send_keys(Keys.SPACE):空格键
- send_keys(Keys.TAB):制表键
- send_keys(Keys.ESCAPE):esc键
- send_keys(Keys.ENTER):回车键
- send_keys(Keys.CONTROL,’a’):全选
- send_keys(Keys.CONTROL,’c’):复制
- send_keys(Keys.CONTROL,’x’):剪切
- send_keys(Keys.CONTROL,’v’):粘贴
- send_keys(Keys.F1):F1键
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
# 打开浏览器的百度首页
driver.get("https://www.baidu.com")
# 在输入框中输入“seleniumm”
driver.find_element_by_id("kw").send_keys("seleniumm")
# 等待1秒
sleep(1)
# 去掉seleniumm的m
driver.find_element_by_id("kw").send_keys(Keys.BACKSPACE)
sleep(1)
# 追加空格
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
sleep(1)
# ctrl + a全选
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
sleep(1)
# ctrl + x剪切
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
sleep(1)
# ctrl + v粘贴
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")
sleep(1)
# enter
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
sleep(3)
driver.quit()
2. 判断元素状态
- is_displayed(): 设置该元素是否用户可见,结果就是真和假。
- is_enabled():判断是否可用
- is_selected:判断是否选中,一般用复选框或者单选框的判断
#导包、创建浏览器对象、打开百度首页
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
#判断百度一下按钮是否显示出来了
# if driver.find_element_by_id("su").is_displayed():
if driver.find_element_by_id("su").is_enabled():#判断是否可用
print("正常显示了百度一下")
else:
print("显示失败")
#退出浏览器对象
driver.quit()
3. 多窗口操作
每一个页面都一个句柄(handle)值,对一个页面来说是唯一,是页面的一个标识webdriver进行自动化测试,需要将driver绑定到页面句柄,你的driver只能控制你绑定句柄的这个页面,因此对不同的窗口页面的元素,driver就不能操作
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
# 打开淘宝页面
driver.get("https://www.taobao.com")
sleep(2)
# 点击聚划算
driver.find_element_by_partial_link_text("聚划算").click()
# 打开所有窗口句柄
handles = driver.window_handles
# 切换句柄,转到聚划算窗口
driver.switch_to.window(handles[1])
sleep(1)
# 点击女装
driver.find_element_by_link_text("女装").click()
driver.back()
sleep(2)
driver.quit()
4. 截屏
将运行的页面截图保存在本地,推荐使用png格式:
- driver.save_screenshot(r"e:\abc.png")
- driver.get_screenshot_as_file("{}.{}".format(“e:/aaa”,“png”))
- driver.get_screenshot_as_file(r"e:\abc.png")
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# driver.save_screenshot(r"e:\sss.png")
# driver.get_screenshot_as_file("{}.{}".format("e:/aaa","png"))
# driver.get_screenshot_as_file(r"e:\sss.png")
# driver.quit()
5. 浏览器的前进、后退与刷新
在使用浏览器浏览网页时,浏览器提供了前进、后退与刷新按钮,可以方便的在浏览过的页面之间来回切换、刷新
- back()
- forward()
- refresh()
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
#页面的前进后退操作
# driver.find_element_by_link_text("新闻").click()
# time.sleep(2)
# 后退到百度首页
# driver.back()
# time.sleep(2)
# 前进到新闻页面
# driver.forward()
# time.sleep(2)
# 执行一次刷新操作
# driver.refresh()
# 退出浏览器对象
# driver.quit()
6. iframe/frame页面嵌套操作
在一个页面中可以嵌套另外一个页面,如frame/iframe技术,这是现在很多web应用中使用的一种方式,webdriver对象只能在一个页面(外层是默认的)中定位元素,需要一种方式将driver对象从外层切换给内层使用才能对内层的对象进行处理。
'''
打开腾讯首页(www.qq.com)
点击首页的邮箱按钮
点击账号密码登录/点击基本版本
'''
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.qq.com")
driver.find_element_by_link_text("Qmail").click()
# 切换页面句柄
handles = driver.window_handles
driver.switch_to.window(handles[1])
# 点击基本版
# driver.find_element_by_link_text("基本版").click()
# sleep(2)
# 将driver切换到内层页面上
# 可以使用name,id
driver.switch_to.frame("login_frame")
# 可以使用frame索引
# driver.switch_to.frame(1)
# 直接给frame对象,frame标签属于外面页面
# frameObject = driver.switch_to.frame("login_frame")
# driver.switch_to.frame(frameObject)
driver.find_element_by_class_name("switch_btn").click()
sleep(2)
# 把焦点切回来,切回主文档
driver.switch_to.default_content()
driver.find_element_by_link_text("基本版").click()
sleep(2)
driver.quit()