selenium之2 模拟事件处理

2.1 ActionChains模拟用户行为
需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽

from selenium.webdriver.common.action_chains import ActionChains
selenium.webdriver.common.action_chains.ActionChains(driver)

调用ActionChains的方法时不会立即执行,会将所有的操作按顺序存放在一个队列里,当调用perform()方法时,队列中的事件会依次执行

支持链式写法或者分步写法
ActionChains(driver).click(ele).perform()

鼠标和键盘方法列表:

   perform() 执行链中的所有动作

	click(on_element=None) 单击鼠标左键

	context_click(on_element=None) 点击鼠标右键

	double_click(on_element=None) 双击鼠标左键

	move_to_element(to_element) 鼠标移动到某个元素
	
	ele.send_keys(keys_to_send) 发送某个词到当前焦点的元素

	========== 不常用 ==========

	click_and_hold(on_element=None) 点击鼠标左键,不松开

	release(on_element=None) 在某个元素位置松开鼠标左键

	key_down(value, element=None) 按下某个键盘上的键

	key_up(value, element=None) 松开某个键

	drag_and_drop(source, target) 拖拽到某个元素然后松开

	drag_and_drop_by_offset(source, xoffset, yoffset) 拖拽到某个坐标然后松开

	move_by_offset(xoffset, yoffset) 鼠标从当前位置移动到某个坐标

	move_to_element_with_offset(to_element, xoffset, yoffset) 移动到距某个元素(左上角坐标)多少距离的位置

	send_keys_to_element(element, keys_to_send) 发送某个键到指定元素

2.2 hover菜单栏弹出

from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(ele1).perform()

实例:打开淘宝,鼠标移动到“我的淘宝”,点击“已买到的宝贝”

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Firefox()
driver.get("https://www.taobao.com/")
print(driver.title)
sleep(3)

ele1=driver.find_element_by_css_selector("#J_SiteNavMytaobao > div:nth-child(1) > a:nth-child(1) > span:nth-child(1)")
ActionChains(driver).move_to_element(ele1).perform()

ele2=driver.find_element_by_css_selector("#J_SiteNavMytaobao > div:nth-child(2) > div:nth-child(1) > a:nth-child(1)")
sleep(2)
ele2.click()

2.3 模拟用户登录
查找登录框-》输入用户名和密码-》触发登录-》判断登录是否成功-》打印结果
实例:登录淘宝,并验证是否登录成功

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Firefox()
driver.get("https://www.taobao.com/")
print(driver.title)
sleep(3)
driver.find_element_by_css_selector(".site-nav-sign > a:nth-child(1)").click()
sleep(1)
driver.find_element_by_css_selector("#J_Quick2Static").click()
sleep(1)
username=driver.find_element_by_css_selector("#TPL_username_1")
username.clear()
username.send_keys("用户名")
sleep(1)
password=driver.find_element_by_css_selector("#TPL_password_1")
password.clear()
password.send_keys("密码")
sleep(1)
button=driver.find_element_by_css_selector("#nc_1_n1z")
action=ActionChains(driver)
action.click_and_hold(button).perform()
action.reset_actions()
action.move_by_offset(300,0).perform()
action.key_up(button)
sleep(5)
driver.find_element_by_css_selector("#J_SubmitStatic").click()

这里执行到滑块有点问题,每次滑完后老是提示错误,导致登录不上去
在网上查了一下,找到了问题所在:淘宝登录滑块出错问题
所以要设置ip代理,这里暂时还没学到,先放一放,后面学到再补充。

2.4 网页等待时间

  • 为什么需要等待时间–》等系统稳定
    网页需要加载对应的资源文件,页面渲染,窗口处理等等

  • 自动化测试常用的等待时间
    强制等待 :
    from time import sleep
    sleep(5) # 强制等待5秒再执行下一步,缺点是不管资源是不是完成,都必须等待

    隐性等待
    driver.implicitly_wait(10) # 隐性等待,最长等10秒
    设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下 一步,弊端就是程序会一直等待整个页面加载完成,到浏览器标签栏那个加载圈不再转
    注意:对driver起作用,所以只要设置一次即可,没有必要到处设置

    显性等待
    WebDriverWait 需要配合 until和until_not,程序每隔N秒检查一次,如果成功,则执行下一步,否 则继续等待,直到超过设置的最长时间
    from selenium.webdriver.support.wait import WebDriverWait

    语法:
    WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    结论: 隐性等待和显性等待可以同时用,等待的最长时间取两者之中的较大者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值