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

【Selenium】隐藏元素的定位和操作|隐藏与isDisplay方法

一、selenium 中隐藏元素如何定位?

如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了
但是吧~~~能定位到并不意味着能操作元素(如click,clear,send_keys)

二、隐藏元素

如下图有个输入框和一个登录的按钮,本来是显示的
元素的属性隐藏和显示,主要是 type="hidden"和 style="display: none;"属性来控制的,接下来在元素属性里面让它隐藏
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><p>这里有个按钮,是隐藏的<!-- type="hidden" --><br>输入账号<input id="chi" name="hello" type="hidden"><!-- style="display: none;" --><br><button id="fan" name="heo" style="display: none;">登录</button><br><a hidden id="baidu" href="https://www.baidu.com">访问百度</a></p></body>
</html>
结果如下:

三、定位隐藏元素

隐藏元素用普通元素定位方法——可以定位到!

webDriver.get("file:front/display.html");
WebElement chi = webDriver.findElement(By.id("chi"));//获取元素属性
System.out.println(chi.getAttribute("name"));//hello//查看元素是否隐藏
System.out.println(chi.isDisplayed());//false//运行结果可以看出,隐藏元素用普通定位方法一样可以定位到!

四、操作隐藏元素

隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,操作元素是 click,clear,send_keys 这些方法

用隐藏元素的sendKeys 和 click 方法都会报错:ElementNotInteractableException: element not interactable元素不可交互,不可以被操作。

首先 selenium 是无法操作隐藏元素的(但是能正常定位到),本身这个框架就是设计如此,如果非要去操作隐藏元素,那就用 js 的方法去操作,selenium 提供了一个入口 可 以 执行 js 脚 本。

js 和 selenium 不同,页面上有的元素(在 dom 里面的),都能正常的操作, 可以详看前面的js篇

js操作隐藏元素
<a hidden id="baidu" href="https://www.baidu.com">访问百度</a> 这个链 接是隐藏的,但是能用 js 点到
 //js点击 hidden 元素 百度WebElement element = webDriver.findElement(By.id("baidu"));JavascriptExecutor javascriptExecutor = webDriver;javascriptExecutor.executeScript("arguments[0].click()",element);
运行完之后,页面正常的点击,跳转到百度页面了
⚠️ 也可以先用 js 去掉 hidden 属性,再用 selenium 操作,但是可以直接js点击,何必多此一举~

五、display:none 和 visibility:hidden 和 type ="hidden"

  • visibility: hidden----将元素隐藏,但是在网页中该占的位置还是占着。
    • 例如有三个table,将中间的一个table hidden掉,你会发现在那个被hidden的table看不见了,但是,中间会留有很大的一空白,而这个空白就是这个table没有被隐藏时所占的位置;

  • display: none----将元素的显示设为无,即在网页中不占任何的位置。——isDisplayed() =false
    • 例如有三个table,将中间的一个table none掉,你会发现在剩下的两个table中间不会有任何的空白。就好像中间的那个table从来不存在过一样。

    • 而none的作用更像是把元素从网页中“去除”(当然不是真的去除,只是效果是如此)

  • type ="hidden"和上面两个不一样,它叫做隐藏域,作为input 的一种输入类型,它的特点就是“看不见”;——isDisplayed() =false
    • 在表单插入中隐藏域的目的在于收集和发送信息,以利于被处理表单的程序所使用

    • 注:隐藏只是在网页页面上不显示输入框,但是虽然隐藏了,还是具有form传值功能。一般用来传值,而不必让用户看到。

    • 它可以隐藏有用但又不能让浏览者看到的信息。

http://www.lryc.cn/news/326728.html

相关文章:

  • 视图的作用
  • 动态ip白名单频繁更改问题解决方案
  • 什么是物联网监控平台?部署物联网平台有什么作用?
  • netty构建udp服务器以及发送报文到客户端客户端详细案例
  • Selenium 学习(0.22)——软件测试之小结
  • 贪心算法问题
  • 深入理解 @Transactional 注解在 Spring 中的应用
  • Python爬虫之爬取网页图片
  • AI Agent(LLM Agent)入门解读
  • 自动化面试常见算法题!
  • CCF-CSP真题202206-2《寻宝!大冒险!》
  • Rust编程(三)生命周期与异常处理
  • 【办公类-21-11】 20240327三级育婴师 多个二级文件夹的docx合并成docx有页码,转PDF
  • OSG编程指南<二十一>:OSG视图与相机视点更新设置及OSG宽屏变形
  • Laplace变换-3
  • LVS负载均衡-DR模式配置
  • 【unity】如何汉化unity Hub
  • 【算法】KMP-快速文本匹配
  • 多维数组和交错数组笔记
  • Python(django)之单一接口展示功能前端开发
  • 【大模型】非常好用的大语言模型推理框架 bigdl-llm,现改名为 ipex-llm
  • Kubernetes示例yaml:3. service-statefulset.yaml
  • Windows平台cmake编译QT源码库,使用VScode开发QT
  • 腾讯云轻量8核16G18M服务器多少钱一年?
  • 二分练习题——123
  • 淘宝详情数据采集(商品上货,数据分析,属性详情,价格监控),海量数据值得get
  • Django之Web应用架构模式
  • GPT提示词分享 —— 口播脚本
  • 笔记本作为其他主机显示屏(HDMI采集器)
  • 02.percona Toolkit工具pt-archiver命令实践