程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python selenium ActionChains 庫的多種測試方法

編輯:Python

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

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

圖2





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


圖2



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


圖2

圖3

圖4

圖5

圖6

圖7



例子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



圖2


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved