天天看點

Python selenium ActionChains 庫的多種測試方法

之前除了介紹 ActionChains 庫的 move()方法外,還有其他的主要方法,具體方法如下圖所示:

Python selenium ActionChains 庫的多種測試方法

Sahi Tests 是一個基于UI自動化測試架構網站,以下相關的方法測試視訊 請看 https://weibo.com/2203755810

1. click,double_click right_click 方法測試

#1:

定位 “click me" (單擊左鍵) 如下圖1:

#2:

定位 “dbl click me” (輕按兩下) 如下圖1:

#3:

定位 “right click me” (單擊右鍵) 如下圖1:

#4:

執行左鍵單擊操作測試。

#5:

執行輕按兩下操作測試。

#6:

執行右鍵單擊操作測試。

#7:

最後列印 Value屬性值的測試結果和測試過程的内容是否相符,如下圖2:

from selenium import webdriver

from selenium.webdriver import ActionChains

import time

browser = webdriver.Chrome()

browser.maximize_window()

browser.get(‘http://sahitest.com/demo/clicks.htm’)

time.sleep(2)

#1

click_btn = browser.find_element_by_css_selector(‘body > form > input[type=button]:nth-child(10)’)

#2

double_click_btn = browser.find_element_by_css_selector(‘body > form > input[type=button]:nth-child(8)’)

#3

right_click_btn = browser.find_element_by_css_selector(‘body > form > input[type=button]:nth-child(13)’)

#4

ActionChains(browser).click(click_btn).perform()

time.sleep(2)

#5

ActionChains(browser).double_click(double_click_btn).perform()

time.sleep(2)

#6

ActionChains(browser).context_click(right_click_btn).perform()

#7

print(browser.find_element_by_name(‘t2’).get_attribute(‘value’))

注:在測試 #4,#5,#6 這 3步中,可以用以下鍊式表達:

ActionChains(browser).click(click_btn).double_click(double_click_btn).context_click(right_click_btn).perform()

圖1

Python selenium ActionChains 庫的多種測試方法

圖2

Python selenium ActionChains 庫的多種測試方法

2.drag_and_drop, click_and_hold, release 方法測試

drag_and_drop(source, target) : 拖拽到某個指定element,然後松開。

source: 源目标的 element

target:要移動到指定位置的 element

click_and_hold(element): 在指定element點選滑鼠左鍵,不松開。

release(element) : 在指定element位置松開滑鼠左鍵。

#1:

定位 “Drag me”,也就是源目标 element的位置。

#2, #3,#4,#5 :

分别定位 ” Item1" “Item2” “Item3” “Item4”,也就是目标位置對應的element位置。由于這4個 item 都是相同的 class 屬性名,同在 div label裡,這裡就直接對每個 item 定位。或者也可以用循環去按照 index 位置去擷取定位。 如下圖1:

#6, #7,#8,#9:

把源目标 “Drag me" 分别移動到 Item1, Item2, Item3, Item4,注意之間需要加上sleep() 時間停頓,否則會因為速度過快而失敗。

#10:

最後列印 Value屬性值的測試結果和測試過程的内容是否相符,結果都是在div的 label裡,直接分别對每個結果定位,取 text 值。或者用循環的方法,分别提取 text 值。 如下圖2:

from selenium import webdriver

from selenium.webdriver import ActionChains

import time

browser = webdriver.Chrome()

browser.maximize_window()

browser.get(‘http://sahitest.com/demo/dragDropMooTools.htm’)

time.sleep(2)

#1

square_source = browser.find_element_by_id(‘dragger’)

#2

square_target1 = browser.find_element_by_css_selector(‘body > div:nth-child(4)’)

#3

square_target2 = browser.find_element_by_css_selector(‘body > div:nth-child(5)’)

#4

square_target3 = browser.find_element_by_css_selector(‘body > div:nth-child(6)’)

#5

square_target4 = browser.find_element_by_css_selector(‘body > div:nth-child(7)’)

#6

ActionChains(browser).drag_and_drop(square_source,square_target1).perform()

time.sleep(2)

#7

ActionChains(browser).drag_and_drop(square_source,square_target2).perform()

time.sleep(2)

#8

ActionChains(browser).drag_and_drop(square_source,square_target3).perform()

time.sleep(2)

#9

ActionChains(browser).drag_and_drop(square_source,square_target4).perform()

time.sleep(2)

#10

print(browser.find_element_by_css_selector(‘body > div:nth-child(4)’).text)

print(browser.find_element_by_css_selector(‘body > div:nth-child(5)’).text)

print(browser.find_element_by_css_selector(‘body > div:nth-child(6)’).text)

print(browser.find_element_by_css_selector(‘body > div:nth-child(7)’).text)

圖1

Python selenium ActionChains 庫的多種測試方法

圖2

Python selenium ActionChains 庫的多種測試方法

3. send_keys_to_element(element, keys) 方法

發送某個鍵到指定元素

以之前百度例子中的代碼為例,

adv_input = browser.find_element_by_id(‘adv_keyword’)

adv_input.send_keys(‘testing’)

以上兩段代碼也可以寫成:

ActionChains(browser).send_keys_to_element(browser.find_element_by_id(‘adv_keyword’),‘testing’).perform()

這裡就不再測試,簡單的說,這個方法其實就是把element 的定位 和 keys 作為 params。

4.key_down(value, element) key_up(value, element) 方法測試

其中 params value 要用 Keys.xxx (鍵名)需要 import Keys 庫

key_down 和 key_press 的主要差別 :

key_down 通常可以捕獲鍵盤除了PrScrn所有按鍵

key_press 主要用來接收字母、數字等ANSI字元

ANCI數字代碼中,大寫字母A到Z相對應的編碼是65到90,小寫字母a到z相對應的編碼是97到122

注: 在 Excel 同樣可以通過 char()函數擷取編碼所相對應的字母。

例子1:

#1, #2, #3, #4, #5

分别定位“ Key Up" , " Key Down" , " Key Press", ”Enter", “Result” element 位置, 如下圖1:

#6:

測試 key_down 功能,點選選擇并定位,移到指定 element位置。

測試按下 CTRL 鍵并松開。 如下圖2:

注:根據 Keys 庫,CTRL鍵對應的變量為 CONTROL,是以value值中如果用 CTRL, 會報錯。 詳細可以自己查找 Keys 庫 每個特殊鍵對應的變量名, 如下圖3:

最後列印 result 對應的 value 屬性值的測試結果。 如下圖7 :

#7:

測試 key_up 功能,點選選擇并定位,移到指定 element位置。

測試按下 ALT 鍵并松開。 如下圖4:

最後列印 result 對應的 value 屬性值的測試結果。 如下圖 7:

#8:

測試 key_press 功能,點選選擇并定位,移到指定 element位置。

測試按下 a 鍵并松開。 如下圖5:

最後列印 result 對應的 value 屬性值的測試結果。 如下圖 7 :

#9:

清空 enter 框内容 “a”

#10:

測試按下 A 鍵并松開。 如下圖6:

最後列印 result 對應的 value 屬性值的測試結果。 如下圖 7 :

from selenium import webdriver

from selenium.webdriver import ActionChains

from selenium.webdriver.common.keys import Keys

import time

browser = webdriver.Chrome()

browser.maximize_window()

browser.get(‘http://sahitest.com/demo/keypress.htm’)

time.sleep(2)

#1

key_up = browser.find_element_by_id(‘r1’)

#2

key_down = browser.find_element_by_id(‘r2’)

#3

key_press = browser.find_element_by_id(‘r3’)

#4

enter = browser.find_element_by_xpath(’/html/body/form/input[2]’)

#5

result = browser.find_element_by_xpath(’/html/body/form/input[1]’)

#6

key_down.click()

ActionChains(browser).move_to_element(enter).perform()

ActionChains(browser).key_down(Keys.CONTROL, enter).key_up(Keys.CONTROL).perform()

print(result.get_attribute(‘value’))

#7

key_up.click()

ActionChains(browser).move_to_element(enter).perform()

ActionChains(browser).key_down(Keys.ALT,enter).key_up(Keys.ALT,enter).perform()

print(result.get_attribute(‘value’))

#8

key_press.click()

ActionChains(browser).move_to_element(enter).click().perform()

ActionChains(browser).send_keys(‘a’).perform()

print(result.get_attribute(‘value’))

#9

enter.clear()

#10

key_press.click()

ActionChains(browser).move_to_element(enter).click().perform()

ActionChains(browser).send_keys(‘A’).perform()

print(result.get_attribute(‘value’))

圖1

Python selenium ActionChains 庫的多種測試方法

圖2

Python selenium ActionChains 庫的多種測試方法

圖3

Python selenium ActionChains 庫的多種測試方法

圖4

Python selenium ActionChains 庫的多種測試方法

圖5

Python selenium ActionChains 庫的多種測試方法

圖6

Python selenium ActionChains 庫的多種測試方法

圖7

Python selenium ActionChains 庫的多種測試方法

例子2:copy & paste

#1:

定位第一個username 位置, 如下圖1:

#2:

定位第二個username 位置, 如下圖1:

#3:

點選第一個 Username并在輸入框輸入 ”Testing“

#4:

在第一個 Username 輸入框 測試 ctrl + a

#5:

在第一個 Username 輸入框 測試 ctrl + c

#6:

在第二個 Username 輸入框測試 ctrl + v

#7:

列印測試結果,font color=purple> 如下圖2:

from selenium import webdriver

from selenium.webdriver import ActionChains

from selenium.webdriver.common.keys import Keys

import time

browser = webdriver.Chrome()

browser.maximize_window()

browser.get(‘http://sahitest.com/demo/label.htm’)

time.sleep(2)

#1

Username_up = browser.find_element_by_xpath(’/html/body/label[1]/input’)

#2

Username_down = browser.find_element_by_xpath(’/html/body/label[2]/table/tbody/tr/td[2]/input’)

#3

Username_up.click()

ActionChains(browser).send_keys(‘Testing’).perform()

time.sleep(2)

#4

ActionChains(browser).key_down(Keys.CONTROL).send_keys(‘a’).key_up(Keys.CONTROL).perform()

time.sleep(2)

#5

ActionChains(browser).key_down(Keys.CONTROL).send_keys(‘c’).key_up(Keys.CONTROL).perform()

time.sleep(2)

#6

ActionChains(browser).key_down(Keys.CONTROL,Username_down).send_keys(‘v’).key_up(Keys.CONTROL).perform()

#7

print(Username_up.get_attribute(‘value’))

print(Username_down.get_attribute(‘value’))

圖1

Python selenium ActionChains 庫的多種測試方法

圖2

Python selenium ActionChains 庫的多種測試方法