Selenium2+Python主动化:利用JS办理click失效题目

打印 上一主题 下一主题

主题 1634|帖子 1634|积分 4902


媒介

在使用Selenium2和Python进行主动化测试时,我们有时会碰到这样的情况:元素明明已经被成功定位,代码运行也没有报错,但点击元素后,页面却没有任何反应。由于没有报错信息,仅仅是 click 事件失效,这种题目处理起来着实令人头疼。
本篇文章将介绍两种方法,帮助你办理这种诡异的点击事件失效题目。
一、碰到的题目

在练习操纵百度的搜索设置按钮时,点击保存设置按钮后,预期弹出的 alert 框并未出现(代码运行没有报错,但获取 alert 框失败)。信赖不少人都碰到过雷同的情况。

二、点击父元素

题目分析

出现这种点击失效的题目,很可能是前面操纵 select 元素后产生的后遗症。颠末测试,当注释掉 select 相关代码后,点击操纵能够成功执行。
办理办法

第一种办理办法是,先点击目标元素的父元素一次,然后再点击目标元素。

实现思路

通过先触发父元素的点击事件,可能会办理因之前操纵导致的页面状态异常,从而使后续对目标元素的点击操纵能够正常执行。
三、使用JS直接点击

当碰到上述诡异题目时,我们可以使用JS大法来办理。通过JS直接执行点击事件,绕过可能存在的页面交互异常。
四、参考代码

  1. # coding:utf-8
  2. from selenium import webdriver
  3. from selenium.webdriver.common.action_chains import ActionChains
  4. from selenium.webdriver.support.select import Select
  5. import time
  6. # 初始化浏览器驱动
  7. driver = webdriver.Firefox()
  8. # 打开百度页面
  9. url = "https://www.baidu.com"
  10. driver.get(url)
  11. # 等待页面加载
  12. time.sleep(3)
  13. # 定位设置按钮并悬停
  14. mouse = driver.find_element("link text", "设置")
  15. ActionChains(driver).move_to_element(mouse).perform()
  16. # 等待悬停效果生效
  17. time.sleep(3)
  18. # 点击搜索设置
  19. driver.find_element("link text", "搜索设置").click()
  20. # 等待页面跳转
  21. time.sleep(3)
  22. # 选择每页显示50条
  23. s = driver.find_element("id", "nr")
  24. Select(s).select_by_visible_text("每页显示50条")
  25. # 方法一:先点父元素
  26. # driver.find_element("id", "gxszButton").click()
  27. # driver.find_element("class name", "prefpanelgo").click()
  28. # 方法二:用js直接去点击
  29. js = 'document.getElementsByClassName("prefpanelgo")[0].click();'
  30. driver.execute_script(js)
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表