Python selenium ActionChains 库的多种测试方法

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值