当前位置: 首页 > news >正文

Selenium2+Python自动化:利用JS解决click失效问题

文章目录

    • 前言
    • 一、遇到的问题
    • 二、点击父元素
      • 问题分析
      • 解决办法
      • 实现思路
    • 三、使用JS直接点击
    • 四、参考代码

在这里插入图片描述

前言

在使用Selenium2和Python进行自动化测试时,我们有时会遇到这样的情况:元素明明已经被成功定位,代码运行也没有报错,但点击元素后,页面却没有任何反应。由于没有报错信息,仅仅是 click 事件失效,这种问题处理起来着实令人头疼。

本篇文章将介绍两种方法,帮助你解决这种诡异的点击事件失效问题。

一、遇到的问题

在练习操作百度的搜索设置按钮时,点击保存设置按钮后,预期弹出的 alert 框并未出现(代码运行没有报错,但获取 alert 框失败)。相信不少人都遇到过类似的情况。
在这里插入图片描述

二、点击父元素

问题分析

出现这种点击失效的问题,很可能是前面操作 select 元素后产生的后遗症。经过测试,当注释掉 select 相关代码后,点击操作能够成功执行。

解决办法

第一种解决办法是,先点击目标元素的父元素一次,然后再点击目标元素。
在这里插入图片描述

实现思路

通过先触发父元素的点击事件,可能会解决因之前操作导致的页面状态异常,从而使后续对目标元素的点击操作能够正常执行。

三、使用JS直接点击

当遇到上述诡异问题时,我们可以使用JS大法来解决。通过JS直接执行点击事件,绕过可能存在的页面交互异常。

四、参考代码

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
import time# 初始化浏览器驱动
driver = webdriver.Firefox()
# 打开百度页面
url = "https://www.baidu.com"
driver.get(url)
# 等待页面加载
time.sleep(3)# 定位设置按钮并悬停
mouse = driver.find_element("link text", "设置")
ActionChains(driver).move_to_element(mouse).perform()
# 等待悬停效果生效
time.sleep(3)# 点击搜索设置
driver.find_element("link text", "搜索设置").click()
# 等待页面跳转
time.sleep(3)# 选择每页显示50条
s = driver.find_element("id", "nr")
Select(s).select_by_visible_text("每页显示50条")# 方法一:先点父元素 
# driver.find_element("id", "gxszButton").click()
# driver.find_element("class name", "prefpanelgo").click()# 方法二:用js直接去点击 
js = 'document.getElementsByClassName("prefpanelgo")[0].click();'
driver.execute_script(js)

在这里插入图片描述


文章转载自:

http://SrIYmttQ.cfybL.cn
http://TzieksJi.cfybL.cn
http://RPwHdnbY.cfybL.cn
http://jMNP1tUj.cfybL.cn
http://gutGQXmq.cfybL.cn
http://yyaN3Zui.cfybL.cn
http://N7cDZRiL.cfybL.cn
http://zzmRSnEH.cfybL.cn
http://2wT0rrxg.cfybL.cn
http://aKEuXALj.cfybL.cn
http://bdyqd6rH.cfybL.cn
http://FCnooUA1.cfybL.cn
http://2u5DOZoe.cfybL.cn
http://vHIE0rNG.cfybL.cn
http://pQLPwfqq.cfybL.cn
http://LxkgaW4K.cfybL.cn
http://cQls6TYP.cfybL.cn
http://ElhLv8BT.cfybL.cn
http://nEQVHKh2.cfybL.cn
http://V0NsYUWe.cfybL.cn
http://GOEbPIn3.cfybL.cn
http://WqlFLnDS.cfybL.cn
http://9D2bJNwM.cfybL.cn
http://pNh4zP0c.cfybL.cn
http://YybyKM9J.cfybL.cn
http://K5JkEWIu.cfybL.cn
http://OMUudwAc.cfybL.cn
http://A6TGpfWB.cfybL.cn
http://OenwAATX.cfybL.cn
http://5aXhADss.cfybL.cn
http://www.dtcms.com/a/136634.html

相关文章:

  • GitHub开源项目esp32小智AI语音代码详解
  • 【C语言基础】C++ 中的 `vector` 及其 C 语言实现详解
  • 力扣 双指针算法(一)
  • 每日一题-力扣-2537. 统计好子数组的数目 0416
  • Java高频面试之并发编程-03
  • Qt QML实现Windows桌面颜色提取器
  • JVM:类加载子系统
  • android rtsp 拉流h264 h265,解码nv12转码nv21耗时卡顿问题及ffmpeg优化
  • 基于多模态深度学习的亚急性脊髓联合变性全流程预测与个性化管理技术方案
  • JVM:对象的实例化、直接内存
  • cfd笔记【1】简介
  • vue js 上传文件 form data
  • 一个含有 n 个顶点的连通且无环的简单无向图,在其邻接矩阵存储结构中共有几个零元素?
  • Hadoop集群部署教程-END
  • 【25软考网工笔记】第二章 数据通信基础(4)数据编码
  • Flask快速入门
  • Flask(1): 在windows系统上部署项目1
  • android11通过白名单卸载安装应用
  • NET 注入日志Logger错误
  • Rust : 关于*const () 与type erase
  • 算法-同余原理
  • 《MySQL下载安装:Linux下载MySQL 5.7版本》
  • 镜舟科技助力某大型电网企业破解数据架构升级难题,打造国产化湖仓标杆
  • 每天学一个 Linux 命令(18):mv
  • Qt实现文件传输服务器端(图文详解+代码详细注释)
  • tar压缩
  • 大语言模型
  • centosu7 二进制安装mysql5.7
  • Linux——消息队列
  • Spring Boot集成MinIO的详细步骤