Selenium4.0+Python3系列(四)

2022-10-25 21:01:04

一、寫在前面

上篇文章介紹的是關於瀏覽器的常見操作,接下來,我們將繼續分享關於元素的常見操作,建議收藏、轉發!

二、元素的狀態

在操作元素之前,我們需要了解元素的常見狀態。

1、常見元素狀態判斷,傻傻分不清

  • is_displayed()
  • is_enabled()
  • is_selected()

2、is_displayed()

判斷元素是否顯示

element.is_displayed()

注意:

判斷button是否顯示,和is_displayed()容易混淆的是is_enabled()

區別在於,直接用element.is_enabled()方法判斷button是否顯示,返回值為true,因為button是使用CSS方法判斷是否有效,這並不是真正的方法,需要判斷其class中是否有值為disabled來判斷是否真正處於disabled的狀態.

3、is_enabled()

判斷元素是否有效,即是否為灰化狀態

element.is_enabled()  

4、is_selected()

一般判斷表單元素,如radio或checkbox是否被選中。

element.is_selected() 

三、常見元素的操作

這部分主要演示的常見點選操作,例如:文字輸入、核取方塊、無線電鈕、選擇選項、滑鼠點選事件等等。

1、元素點選操作

演示案例:

點選(滑鼠左鍵)頁面按鈕click()

範例程式碼如下:

driver.get("http://localhost:8080/click.html")
button1 = driver.find_element(By.ID, "button1")
is_displayed = button1.is_enabled()
if is_displayed:
    button1.click()

2、Submit操作

演示案例:

點選(滑鼠左鍵)頁面按鈕submit()

範例程式碼如下:

driver.get("http://localhost:8080/submit.html")
login = driver.find_element(By.ID, "login")
is_displayed = login.is_enabled()
if is_displayed:
    login.submit()
    # login.click()

小貼士:

支援submit的肯定支援click,但是支援click的,不一定支援submit,可能會報錯如下:

3、輸入、清空輸入操作

演示案例:

輸入、清空輸入操作clear(), send_keys()

範例程式碼如下:

username = driver.find_element(By.CSS_SELECTOR, "input[type='text']")
username.clear()
username.send_keys(u"公眾號:軟體測試君")
# 輸出:公眾號:軟體測試君
print('輸入值:{0}'.format(username.get_attribute("value")))
time.sleep(1)

四、滑鼠鍵盤事件操作

1、模擬回車操作

模擬開啟百度搜尋輸入部落格園,回車操作,範例程式碼如下:

driver.get("https://www.baidu.com/")
driver.find_element(By.ID, "kw").send_keys("久曲健 部落格園", Keys.ENTER)

2、常見滑鼠操作

演示案例:

常見滑鼠操作很多,如左鍵點選、懸浮、移動、雙擊、右鍵等等,範例程式碼如下:

driver.get("http://localhost:8080/mouse.html")
# 滑鼠左鍵點選
ActionChains(driver).click(driver.find_element(By.ID, "mouse2")).perform()
time.sleep(1)
driver.switch_to.alert.accept()
time.sleep(1)
# 滑鼠懸浮並移動操作
ActionChains(driver).move_to_element(driver.find_element(By.ID, "mouse1")).pause(1).move_to_element(
    driver.find_element(By.ID, "mouse6")).perform()
time.sleep(1)
driver.switch_to.alert.accept()
# 滑鼠雙擊操作
ActionChains(driver).double_click(driver.find_element(By.ID, "mouse3")).perform()
time.sleep(1)
driver.switch_to.alert.accept()
# 滑鼠右鍵
ActionChains(driver).context_click(driver.find_element(By.ID, "mouse5")).perform()

3、常見的鍵盤操作

鍵盤操作 對應程式碼
鍵盤F1到F12 send_keys(Keys.F1) 把F1改成對應的快捷鍵
複製Ctrl+C send_keys(Keys.CONTROL,'c')
貼上Ctrl+V send_keys(Keys.CONTROL,'v')
全選Ctrl+A send_keys(Keys.CONTROL,'a')
剪下Ctrl+X send_keys(Keys.CONTROL,'x')
製表鍵Tab send_keys(Keys.TAB)

五、演示案例原始碼

範例程式碼:

# -*- coding: utf-8 -*-
"""
@Time : 2022/10/25 21:39
@Auth : 軟體測試君
@File :element_actions.py
@IDE :PyCharm
@Motto:ABC(Always Be Coding)

"""
import time

from selenium.webdriver import Keys, ActionChains
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

'''
初始化操作
'''
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))


def init():
    # 最大化操作
    driver.maximize_window()
    driver.set_script_timeout(60)
    # 智慧等待找到元素後立即繼續執行,全域性生效
    driver.implicitly_wait(60)
    driver.set_page_load_timeout(60)


init()

'''
元素點選操作
'''


def clickDemo():
    # 點選(滑鼠左鍵)頁面按鈕:click()
    driver.get("http://localhost:8080/click.html")
    button1 = driver.find_element(By.ID, "button1")
    is_displayed = button1.is_enabled()
    if is_displayed:
        button1.click()

    # 關閉彈窗
    driver.switch_to.alert.accept()


### 元素基本操作
clickDemo()
time.sleep(1)

'''
submit操作
'''


def submitDemo():
    # 點選(滑鼠左鍵)頁面按鈕:submit()
    driver.get("http://localhost:8080/submit.html")
    login = driver.find_element(By.ID, "login")
    is_displayed = login.is_enabled()
    if is_displayed:
        login.submit()
        # login.click()
    # 小貼士:支援submit的肯定支援click,但是支援click的,不一定支援submit,可能會報錯如下:


submitDemo()

'''
輸入、清空輸入操作
'''


def clearInputDemo():
    # 輸入、清空輸入操作:clear() send_keys()
    username = driver.find_element(By.CSS_SELECTOR, "input[type='text']")
    username.clear()
    username.send_keys(u"公眾號:軟體測試君")
    # 輸出:公眾號:軟體測試君
    print('輸入值:{0}'.format(username.get_attribute("value")))
    time.sleep(1)


clearInputDemo()

'''
模擬開啟百度搜尋輸入部落格園,回車操作
'''


def mockEnterDemo():
    # 模擬開啟百度搜尋輸入部落格園,回車操作 範例程式碼
    driver.get("https://www.baidu.com/")
    driver.find_element(By.ID, "kw").send_keys("久曲健 部落格園", Keys.ENTER)


### 鍵盤操作
mockEnterDemo()
def mouseDemo():
    driver.get("http://localhost:8080/mouse.html")
    # 滑鼠左鍵點選
    ActionChains(driver).click(driver.find_element(By.ID, "mouse2")).perform()
    time.sleep(1)
    driver.switch_to.alert.accept()
    time.sleep(1)
    # 滑鼠懸浮並移動操作
    ActionChains(driver).move_to_element(driver.find_element(By.ID, "mouse1")).pause(1).move_to_element(
        driver.find_element(By.ID, "mouse6")).perform()
    time.sleep(1)
    driver.switch_to.alert.accept()
    # 滑鼠雙擊操作
    ActionChains(driver).double_click(driver.find_element(By.ID, "mouse3")).perform()
    time.sleep(1)
    driver.switch_to.alert.accept()
    # 滑鼠右鍵
    ActionChains(driver).context_click(driver.find_element(By.ID, "mouse5")).perform()


###  常見鍵盤事件操作
mouseDemo()

time.sleep(3)
driver.quit()

六、最後

到此,常見元素操作演示結束,這裡只是列舉了一些常用的操作,關於其他操作,感興趣的同學請左鍵檢視原始碼 !

我是六哥,如果覺得文章對您有幫助,建議收藏、轉發!

請繼續關注我,我的公眾號:軟體測試君,並幫忙轉發文章到朋友圈。

你的每一次轉發,我都當做了喜歡!