「Selenium」- 在页面中,点击按钮(或元素) @20210311

2023-05-16

问题描述

该笔记将记录:在 Selenium 中,如何使用代码点击按钮,以及常见问题处理。

解决方案

使用 click() 点击

通常点击元素使用 click() 方法即可:


// 选择元素并进行点击
webDriver.findElement(By.id("buttoncheck")).click()

// 等待元素可以点击
 new WebDriverWait(webDriver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("xpath-query"))).click()
  

使用 JavaScript 点击

或者,当找到元素后,使用 JavaScript 点击:


((JavascriptExecutor) webDriver).executeScript("arguments[0].click();", button);
  

该方法可以我们遇到的解决如下问题:


org.openqa.selenium.ElementClickInterceptedException: element click intercepted:
 Element xxxxxxxx is not clickable at point (1154, 91). Other element would receive the click: xxxxxxx
  

更多点击动作

复杂的点击操作(长按、右键、双击),参考 Test Automation With Selenium Click Button Method(Examples) 页面

关于点击需要注意的事项

现实世界是复杂的,我们将在该部分中记录我们遇到的问题(与点击相关)。

# 10/03/2020 某些元素,当在浏览器窗口(viewport)中可见时,才会被绑定点击事件。因此,如果没有滚动到该元素使其可见,点击动作是无效的。在 Firefox 80.0.1 (64-bit) 中,滚动至元素可见,会发现在 Inspector 中该元素的后面后显示 event 标签。使用如下代码进行滚动及滚动完成的检查:


// 下面是与滚动至元素可见的代码的参考文献
// https://www.guru99.com/scroll-up-down-selenium-webdriver.html
// https://stackoverflow.com/questions/42982950/how-to-scroll-down-the-page-till-bottomend-page-in-the-selenium-webdriver

// 第一步、执行滚动
((JavascriptExecutor) webDriver).executeScript('arguments[0].scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"});', bodyElement);

// 理解 scrollIntoView 需要:
// 阅读:https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
// 在我们的场景中,block: "end" 是关键设置,否则会出现“没有显示元素,而下面滚动已经提示完成”,导致事件没有绑定到元素上便触发点击事件。

// 等待滚动完成
new WebDriverWait(webDriver, 30).until(new Function<WebDriver, Boolean>() {
    @Override
    public Boolean apply(WebDriver tmpWebDriver) {
    	String isVisibleJavascript =  "return (arguments[0].getBoundingClientRect().top >= 0) && (arguments[0].getBoundingClientRect().bottom <= window.innerHeight);"
		Object pageReady = ((JavascriptExecutor) tmpWebDriver).executeScript(isVisibleJavascript, bodyElement);
		Boolean complete = pageReady.toString().equals("true");
		System.out.println("检查滚动是否完成:${complete}"); // Groovy
		return complete;
    }
});

// 要理解 等待滚动完成 代码,需要阅读以下文档(依序):
// https://stackoverflow.com/questions/487073/how-to-check-if-element-is-visible-after-scrolling
// https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerHeight
  

相关文章

「Selenium」- 文件上传

参考文献

Test Automation With Selenium Click Button Method(Examples)
Check if element is clickable in Selenium Java - Stack Overflow

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

「Selenium」- 在页面中,点击按钮(或元素) @20210311 的相关文章

  • OEPNCV_摄像头采集显示

    span class token macro property span class token directive keyword include span span class token string lt stdio h gt sp
  • ArchLinux系统安装(BIOS)

    一 简介 Arch linux 是朝向轻量 xff08 lightweight xff09 以及简单 xff08 simple xff09 的 Linux 发行版 其中 简单 xff08 Simplicity xff09 被定义为 避免不必
  • Android 常见的抓log方法总结

    1 kernel log 1 adb shell dmesg gt c log dmesg txt 2 adb shell cat proc kmsg gt c log kmsg 3 findstr xx 只看xx相关的log 4 查看特定
  • 工作纪实_24-使用@Sl4j注解但是确无法使用log.info打印日志

    如果出现这种情况 xff0c 第一时间先执行打包mvn clean package命令 xff0c 这么做是为了检查log日志包是否齐全 xff0c 此次我打包报错是找不到org slf4j包 xff0c 很明显 xff0c 我们检查一下相
  • gradle-wrapper.properties中各属性的含义

    gradle wrapper properties中各属性的含义 1 gradle wrapper properties 每一个用gradle编译的工程 xff0c 都会有一个gradle wrapper目录 该目录下有2个文件 xff1a
  • cordova 打包步骤

    年底了 xff0c 好多资料都在整理 xff0c 为了避免遗忘 xff0c 也为了利益他人吧 直接上步骤吧 xff1a 增加运行环境的模板 cordova platform add android 编译android的程序 cordova
  • 视图绑定

    视图的绑定从另一个角度看就是implicit的转换 主要用在两个场合 1 当一个T类型的变量t要装换成A类型时 2 当一个类型T的变量t无法拥有A类型的a方法或变量时 其实视图的绑定是为了更方便的使用隐式装换 如果我们不用视图绑定看看 这个
  • 【Settings随记:二】一级菜单,二级菜单的添加与隐藏,添加辅助功能

    我们可以先从Settings的启动来看 先进入到AndroidManifest xml 找到启动的Activity span class token tag span class token tag span class token pun
  • 新加装的硬盘,装上系统后发现EFI分区没有被创建,还是用旧硬盘的EFI分区

    引发问题 xff1a 如果没有旧硬盘就没法引导系统 xff0c 没法开机 解决办法 xff1a 在新硬盘增加一个EFI分区 目前情况大概就是这个样子 xff1a xff08 本人忘了截图 xff0c 用别人的 xff09 可见 xff0c
  • 信息安全重点知识

    一 信息安全概述 网络空间安全的重要性 xff1a 没有网络安全就没有国家安全信息安全 xff1a 防止数据未授权的访问 xff0c 数据有意和物一的威胁 网络安全是信息安全的子集 信息安全的三要素 xff08 CIA xff09 xff1
  • 线程同步的四种方式

    一 xff0c 什么是线程同步和互斥 同步就是协同步调 xff0c 按预定的先后次序进行运行 如 xff1a 你说完 xff0c 我再说 这里的同步千万不要理解成那个同时进行 xff0c 应是指协同 协助 互相配合 线程同步是指多线程通过特
  • 海天注塑机KEBA系统数据采集

    本文章只针对海天注塑机的KEBA系统 xff0c 因为其他注塑机厂家也用KEBA系统 xff0c 他们的采集方式可能不太一样 xff0c 所以后续有时间我将写其他文章来解释 xff08 默认你已经向海天采购了OPC组件 xff09 一 采集
  • Axure基础:事件和动态面板

    这一篇文章我们主要是将如何做系统左侧的导航 xff0c 并且告诉大家如何动态的切换各个页面 一 事件 1 事件基础 事件的核心就是什么时候做什么事 其中的什么时候可以是如下 xff1a 能做的事情如下 xff1a 2 远程监控云中的事件 监
  • 设备联网调试三板斧

    在实际的工业互联网项目中 xff0c 设备联网所占的比重越来越大 有的一期项目为了简单快速上线 xff0c 让客户直观体会到工业互联网的效果 xff0c 直接会把设备联网放在一期项目的重点 那么在做此类项目时 xff0c 设备联网调试就显得
  • 光立方完全解析

    转载请注明出处 xff1a http blog csdn net ruoyunliufeng article details 37903899 这个4 4 4的三色光立方是我在初学单片机的时候做的一个小项目 很适合给初学单片机和C语言的同学
  • 远程视频监控之应用篇(mjpg-streamer)

    转载请注明出处 xff1a http blog csdn net ruoyunliufeng article details 38515311 这篇文章将主要结合源码介绍mjpg streamer xff0c 使小伙伴们了解视频监控的实现
  • Matplotlib 入门(三):多图合并

    一 多合一显示 1 subplot方法 xff1a 设置行 列和起始点 plt subplot 2 1 1 分成两行一列 xff0c 起始点为1 2 代码 coding utf 8 34 34 34 Created on Sun Sep 2
  • python毫秒级延时

    一 毫秒延时 近期有一个ms级别延时的需求 xff0c 实际测试了一下 xff0c 环境 xff1a win7 64位 xff0c python2 7 13 结果 xff1a 毫秒级别的延时是能够支持的 xff0c 微妙是不支持的 二 de
  • 数据分析之乳腺癌预测

    零 定义问题 1 1 数据介绍 http archive ics uci edu ml machine learning databases breast cancer wisconsin breast cancer wisconsin n
  • 关于mongodb占用内存过大的问题

    一 现象 最近发现自己服务器内存越来越少 xff0c 查了一下原来是部署的mongodb使用内存在线性增加 不查不知道 xff0c 一查吓一跳 xff0c 竟然占用了3G的内存 二 分析 1 内存增加的原因 mongo为了优化他的读写效率

随机推荐