『心善淵』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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM