『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件

(一)对鼠标的操作

1、鼠标事件介绍

前面例子中我们已经学习到可以用click()来模拟鼠标的单击操作,而我们在实际的Web产品测试中发现,有关鼠标的操作,不单单只有单击,有时候还要用到右击,双击,拖动等操作,这些操作包含在ActionChains类中。

2、ActionChains 类鼠标操作的常用方法

事件 说明
context_click() 右击
double_click() 双击(常用)
drag_and_drop() 拖动(常用)
move_to_element() 鼠标悬停在一个元素上(常用)
click_and_hold() 按下鼠标左键在一个元素上

注意:Seleniun只能实现在页面中单击右键,但是右键后出现的菜单界面上,还不支持定位,也就不能操作。

3、perform()方法

ActionChains用于生成用户的行为。所有的行为都存储在ActionChains对象。

perform()方法执行所有ActionChains中存储的行为。

4、鼠标事件操作步骤

  1. 引入包ActionChains()
    # 两种导入都可以
    from selenium.webdriver import ActionChains
    from selenium.webdriver.common.action_chains import ActionChains
    
    这里需要注意的是,在使用ActionChains类下面的方法之前,要先将包引入。
  2. 定位需要鼠标操作的元素。
  3. 执行鼠标事件。
    """
    1. 语法:
    	ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
    2. 说明:
    	driver: wedriver实例执行用户操作,也就是当前浏览器对象。
    	鼠标事件(元素):双击,拖拽,悬停等动作,需要将操作的元素定位出来并且穿入相应的动作中。
    	perform() : 执行
    """
    # 1. 定位注册按钮
    button = driver.find_element_by_css_selector("button[type='submitA']")
    # 2. 执行鼠标悬停事件
    ActionChains(driver).move_to_element(button).perform()
    
    perform()执行所有ActionChains中存储的行为。
    perfrome()同样也是ActionChains类提供的的方法,通常与ActionChains()配合使用。

5、示例

(1)右键单击、左键双击

"""
1.学习目标:
    必须掌握鼠标的操作方法
2.语法
    2.1 导入ActionChains
        from selenium.webdriver.common.action_chains import ActionChains
        from selenium.webdriver import ActionChains
    2.2 使用方法
        ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
    2.3 鼠标右键
        context_click(需要操作的元素)
    2.3 鼠标双击
        double_click(需要操作的元素)
3.需求
    在百度页面中,完成鼠标右击和鼠标双击动作
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
# from selenium.webdriver.common.action_chains import ActionChains

# 2.打开浏览器
driver = webdriver.Chrome()

# 3.打开百度页面
url = "https://www.baidu.com/"
driver.get(url)

# 4.在百度首页右键单击、左键双击
# 4.1 右键单击
# 4.1.1 定位百度首页logo
logo = driver.find_element_by_css_selector("#lg > map > area")

# 4.1.2 在logo图片上右击鼠标
ActionChains(driver).context_click(logo).perform()

# 4.2 左键双击 百度一下
# 4.2.1 定位百度输入框
baidu_element = driver.find_element_by_id("kw")

# 4.2.2 在输入框中输入【心善渊&Selenium基础】
baidu_element.send_keys("【心善渊&Selenium基础】")
sleep(3)

# 4.2.3 定位按钮 百度一下
yixia_element = driver.find_element_by_id("su")

# 4.2.4 左键双击 百度一下
ActionChains(driver).double_click(yixia_element).perform()
sleep(3)

# 5.关闭浏览器
driver.quit()

(2)鼠标拖拽动作

动作描述

  • 在源元素上按下鼠标左键,然后移动到目标元素上释放。
  • source:鼠标拖动的源元素。
  • target:鼠标释放的目标元素。

页码代码片段

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>拖拽div</title>
    <style type="text/css">
        div {
            position: absolute;
            width: 150px;
            height: 150px;
            background-color: red;
        }
    </style>
<body>
<div id="div1"></div>
<div id="div2" style="left:170px; background-color:green"></div>
</body>
</html>

注:需要自己写拖动脚本,以上只是个样式。

脚本代码

"""
1.学习目标:
    必须掌握鼠标拖拽的使用
2.语法
    2.1 导入ActionChains
        from selenium.webdriver.common.action_chains import ActionChains
        from selenium.webdriver import ActionChains
    2.2 使用方法
        ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
    2.3 鼠标拖拽动作
        (1)把一个元素,拖拽到目标元素位置
            drag_and_drop(起始元素,终止元素)
        (2)把一个元素拖动到页面指定位置
            drag_and_drop_by_offset(元素, 横坐标, 纵坐标)

3.需求
    在页面中,完成鼠标拖拽动作。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver import ActionChains

# from selenium.webdriver.common.action_chains import ActionChains

# 2.打开浏览器
driver = webdriver.Chrome()

# 3.打开页面
url = "file:///" + os.path.abspath("./练习页面/drop.html")
driver.get(url)

# 4.使用鼠标拖拽方法
# 4.1 把一个元素,拖拽到目标元素位置
# 4.1.1 定位起始元素和终止元素
red = driver.find_element_by_id("div1")  # 定位红色
green = driver.find_element_by_id("div2")  # 定位绿色
sleep(2)
# 4.1.2 执行鼠标拖拽
ActionChains(driver).drag_and_drop(red, green).perform()
sleep(2)
# 4.2 将绿色元素拖动到页面指定位置
# 4.2.1 定位绿色元素
green_1 = driver.find_element_by_id("div1")

# 4.2.2 执行鼠标拖拽,(600, 200)为坐标
ActionChains(driver).drag_and_drop_by_offset(green_1, 600, 200).perform()

# 5.关闭浏览器
driver.quit()

(3)鼠标悬停、按下动作

页面代码片段

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>注册A</title>
    <style type="text/css">
        /*悬停-绿色*/
        button:hover {
            padding: 10px;
            background: green;
        }

        /*按下状态-红色*/
        button:active {
            padding: 10px;
            background: red;
        }

    </style>
</head>
<body>
<form action="">
    <div id="zc">
        <p>
            <button type="submitA" value="注册A" title="加入会员A">注册用户A</button>
        </p>
    </div>
</form>
</body>
</html>

脚本代码

"""
1.学习目标:
    必须掌握鼠标悬停、按下的操作方法
2.语法
    2.1 导入ActionChains
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver import ActionChains
    2.2 使用方法
    ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
    2.3 鼠标悬停
        move_to_element(需要操作的元素)
    2.4 鼠标按下
        click_and_hold(需要操作的元素)
3.需求
    在页面中,完成上述操作。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver import ActionChains

# 2.打开浏览器
driver = webdriver.Chrome()

# 3.打开页面
url = "file:///" + os.path.abspath("./4.html")
driver.get(url)
sleep(2)

# 4.对注册按钮,执行鼠标悬停、按下事件
# 4.1 鼠标悬停-按钮变黄
# 4.1.1 定位注册按钮
button = driver.find_element_by_css_selector("button[type='submitA']")

# 4.1.2 执行鼠标悬停事件
ActionChains(driver).move_to_element(button).perform()
sleep(3)

# 4.2 鼠标按下,按钮变红
# 4.2.1 执行鼠标按下事件
ActionChains(driver).click_and_hold(button).perform()
sleep(3)

# 5.关闭浏览器
driver.quit()

(三)对键盘的操作

1、键盘事件介绍

我们在实际的测试工作中,有时候我们在测试时需要使用tab键将焦点转移到下一个元素,用于验证元素的排序是否正确。

webdriverKeys()类提供键盘上所有按键的操作,甚至可以模拟一些组合建的操作,如Ctrl+ACtrl+CCtrl+V 等。

在Selenium中使用send_keys()来执行模拟键盘上所有按键的操作。

2、使用Keys类来处理键盘操作

Keys类键盘事件 作用说明
send_keys(Keys.BACK_SPACE) 删除键(Backspace
send_keys(Keys.SPACE) 空格键(Space
send_keys(Keys.TAB) Tab键
send_keys(Keys.ESCAPE) 回退键(Esc
send_keys(Keys.ENTER) 回车键(Enter
send_keys(Keys.CONTROL,'a') 全选(Ctrl+A
send_keys(Keys.CONTROL,'c') 复制(Ctrl+C
send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X
send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V
send_keys(Keys.F1) 键盘F1
send_keys(Keys.F12) 键盘F12

3、键盘事件练习

页面代码片段

<!DOCTYPE html>
<html lang="zh-cn">
<body>
<div id="zc">
    <legend>注册用户A</legend>
    <p id="p1">
        <label for="userA">账号A</label>
        <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
    </p>
    <p>
        <label for="password">密码A</label>
        <input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
    </p>
</div>
</body>
</html>

脚本代码

"""
1.学习目标:
    掌握selenium中键盘事件的操作
2.语法
    2.1 导入Keys类
    from selenium.webdriver.common.keys import Keys
    2.2 使用
    元素.send_keys(键名称)
        1.单个键使用
            (Keys.键名称)
            注意:键名称全大写字母
        2.组合键
            (Keys.键名称,"c")

3.需求
    在页面中,完成文字内容的复制操作。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver.common.keys import Keys

# 2.打开浏览器
driver = webdriver.Chrome()

# 3.打开页面
url = "file:///" + os.path.abspath("./1.html")
driver.get(url)

# 4.键盘事件
# 在账号A中输入"Selenium",将输入的内容复制到密码A输入框中
# 4.1 定位账号A和电话A
textA = driver.find_element_by_id("userA")  # 账号A
passwordA = driver.find_element_by_id("passwordA")  # 密码A

# 4.2 在账号A中输入"Selenium"
textA.clear()
textA.send_keys("Seleniumm")
sleep(2)

# 4.3 使用退格键删除m字母
textA.send_keys(Keys.BACKSPACE)
sleep(2)

# 4.4 将账号A中的文字复制
# 全选账号A中的文字
textA.send_keys(Keys.CONTROL, "a")
# 复制账号A中的文字
textA.send_keys(Keys.CONTROL, "c")

# 4.5 将复制的内容粘贴到密码A输入框中
passwordA.send_keys(Keys.CONTROL, "v")

# 5.关闭浏览器
sleep(2)
driver.quit()
posted @ 2021-07-02 20:33  繁华似锦Fighting  阅读(649)  评论(0编辑  收藏  举报