之前除了介绍 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