1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

import time

from selenium import webdriver

from selenium.webdriver import ActionChains

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

service = Service(r "D:\software\chromedriver.exe" )

driver = webdriver.Chrome(service = service)

# 控制浏览器访问url地址

driver.get( "https://www.taobao.com/" )

# 隐式等待

driver.implicitly_wait( 1 )

account = 'account' # 账号

password = 'abc123' # 密码

# 找到“登录”位置

driver.find_element(by = By.CSS_SELECTOR, value = "div.member-ft > div > a.btn-login" ).click()

driver.maximize_window()

driver.implicitly_wait( 1 )

# 切换页面 获取当前页面handle 获取所有页面的handle 列表的后面

driver.switch_to.window(driver.window_handles[ 1 ])

# 找到“账号名”输入框

el_account = driver.find_element(by = By.CSS_SELECTOR, value = '#fm-login-id' )

print (el_account.text)

driver.implicitly_wait( 1 )

# 点击账号输入框

el_account.click()

# 输入账号

el_account.send_keys(account)

driver.implicitly_wait( 1 )

# 找到“密码”输入框

el_password = driver.find_element(by = By.XPATH, value = '//*[@id="fm-login-password"]' )

# print(el_password.text)

# print(el_password.location)

# 点击密码输入框

el_password.click()

# 输入密码

el_password.send_keys(password)

driver.implicitly_wait( 2 )

# 找到“登录”按钮,并点击

el_login_btn = driver.find_element(by = By.XPATH, value = '//*[@id="login-form"]/div[4]/button' )

el_login_btn.click()

# print(el_login_btn.location)

driver.implicitly_wait( 1 )

# 切换frame

driver.switch_to.frame( 'baxia-dialog-content' )

# 找到滑块,获取宽高

el1 = driver.find_element(by = By.XPATH, value = '//*[@id="nc_1_n1z"]' )

print (el1.size[ 'width' ])

print (el1.size[ 'height' ])

# 找到拖动区域,获得宽高

el2 = driver.find_element(by = By.XPATH, value = '//*[@id="nc_1__scale_text"]' )

print (el2.size[ 'width' ])

print (el2.size[ 'height' ])

driver.implicitly_wait( 2 )

# 创建一个事件链对象

chains = ActionChains(driver)

# 实现滑块拖动

chains.drag_and_drop_by_offset(el1, el2.size[ 'width' ], - el2.size[ 'height' ])

# 事件提交

chains.perform()

time.sleep( 5 )

# 关闭浏览器

driver.close()

driver.quit()

在做登录测试时,有些站点会有“滑块”验证功能,自动化测试可用对滑块拖拉操作的方式处理:

需求:携程注册“滑块”操作

按住左边滑块

拖放到最右边

用键盘事件中:drag_and_drop_by_offset

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#大牛测试:轻轻松松自动化

#QQ:2574674466

#专注自动化测试技术传播

from selenium import webdriver

import time

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()

driver.get( "https://passport.ctrip.com/user/reg/home" )

driver.find_element_by_css_selector( "#agr_pop > div.pop_footer > a.reg_btn.reg_agree" ).click()

sour = driver.find_element_by_css_selector( "#slideCode > div.cpt-drop-box > div.cpt-drop-btn" )

print (sour.size[ 'width' ])

print (sour.size[ 'height' ])

ele = driver.find_element_by_css_selector( "#slideCode > div.cpt-drop-box > div.cpt-bg-bar" )

print (ele.size[ 'width' ])

print (ele.size[ 'height' ])

time.sleep( 2 )

ActionChains(driver).drag_and_drop_by_offset(sour,ele.size[ "width" ], - ele.size[ "heigh

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你! 【100%无套路免费领取】

其中的关键是需要用 Selenium 库模拟鼠标 拖动 滑块 滑动一定的距离。因为 滑块 的起始位置和滑轨的起始位置相同,所以 滑块 需要移动的距离等于滑轨的跨度减去 滑块 的宽度。下面就来利用开发者工具查看滑轨和 滑块 的宽度。 在浏览器中打开本书配套代码文件中为 滑块 验证码搭建的本地网页文件..
滑块 作为安全验证机制的一种,经常在登录或者注册时涉及。但是在 自动化测试 时,需要想办法用代码的方式来处理 滑块 selenium 中对 滑块 操作 基本是采用元素拖曳的方式,而这种方式需要用到 selenium 的Actionchains功能模块的drag_and_drop_by_offset方法。 示例:以携程网的注册页面为例,URL:https://passport.ctrip.com/user/reg/home/ # coding = utf-8 from selenium import webdriver 你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题 06-19 2. 使用 selenium 的 ActionChains 模拟用户按住 滑块 拖动 操作 。 3. 在 拖动 过程中,可以通过判断 滑块 的位置是否与背景图中的缺口位置重合来判断是否 拖动 成功。 4. 如果 拖动 失败,可以通过调整 拖动 距离或者等待一段时间后再次尝试。 需要注意的是, 滑块 验证码的 实现 方式可能会因 网站 而异,需要根据具体情况进行调整。