关于面试总结10-selenium中隐藏元素如何定位?(hidden、display: none)
前言
面试题: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="yoyo" name="hello" type="hidden">
<!-- type="display: none;" -->
<br>
<button id="yy" name="heo" style="display: none;">登录</button>
<br>
<a hidden id="baidu" href="https://www.baidu.com">访问百度</a>
</p>
</body>
</html>
这样元素就不会显示了,也就是面试官所说的隐藏属性了
定位隐藏元素
前面说了,定位隐藏元素和普通的元素没啥区别,接下来就来验证下,是不是能定位到呢?
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://localhost:63342/test1122/a/b.html")
# 定位type="hidden"隐藏元素
ele1 = driver.find_element_by_id("yoyo")
print("打印元素信息:%s" % ele1)
# 获取元素属性
print(ele1.get_attribute("name"))
# 判断元素是否隐藏
print(ele1.is_displayed())
运行结果:
打印元素信息:<selenium.webdriver.remote.webelement.WebElement (session="1debdd46-21b1-451e-b8a7-5aeff1d74f9d", element="{28628a87-7f22-4574-9e14-931f9c6f20e1}")>
hello
False
运行结果可以看出,隐藏元素用普通定位方法,事实上是定位到了呢!
操作隐藏元素
隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,很多初学者傻傻分不清楚),操作元素是click,clear,send_keys这些方法
# 隐藏输入框元素输入文本
ele1 = driver.find_element_by_id("yoyo")
ele1.send_keys("yoyo")
隐藏元素用send_keys()方法会抛异常'ElementNotVisibleException': Message: Element is not currently visible and so may not be interacted with
这个报错是说元素不可见,不可以被操作,同样的对“登录”按钮点击操作也是会报'ElementNotVisibleException'
# 点击隐藏登录框
ele2 = driver.find_element_by_id("yy")
ele2.click()
JS操作隐藏元素
如果面试官想问的是定位后操作隐藏元素的话,本质上说这个问题就是毫无意义的,web自动化的目的是模拟人的正常行为去操作。
如果一个元素页面上都看不到了,你人工也是无法操作的是不是?人工都不能操作,那你自动化的意义又在哪呢?所以这个只是为了单纯的考察面试者处理问题的能力,没啥实用性!(面试造飞机,进去拧螺丝)
既然面试官这么问了,那就想办法回答上给个好印象吧!
首先selenium是无法操作隐藏元素的(但是能正常定位到),本身这个框架就是设计如此,如果非要去操作隐藏元素,那就用js的方法去操作,selenium提供了一个入口可以执行js脚本。
js和selenium不同,只有页面上有的元素(在dom里面的),都能正常的操作,接下来用js试试吧!
<a hidden id="baidu" href="https://www.baidu.com">访问百度</a>
这个链接是隐藏的,但是能用js点到
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://localhost:63342/test1122/a/b.html")
# js点击hidden元素
js = 'document.getElementById("baidu").click()'
driver.execute_script(js)
运行完之后,会发现页面正常的点击,跳转到百度页面了
备注:百度搜到的可能方法是先用js去掉hidden属性,再用selenium操作,这个有点多此一举,你既然都已经会用js了,何必不一次性到位直接click呢?
交流QQ群:779429633
关于面试总结10-selenium中隐藏元素如何定位?(hidden、display: none)的更多相关文章
- 【Selenium】selenium中隐藏元素如何定位?
前言 面试题:selenium 中隐藏元素如何定位?这个是很多面试官喜欢问的一个题,如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了 但是吧~~~很多面试官自己都搞不清楚 ...
- 使用Selenium对网页元素进行定位的诸种方法
使用Selenium进行自动化操作,首先要做的就是通过webdriver的get()方法打开一个URL链接. 在打开链接,完成页面加载之后,就可以通过Selenium提供的接口,在页面上进行各种操作了 ...
- selenium中的元素操作之下拉列表操作(四)
下拉列表操作中分为两种:select.非select 1.非select的下拉框操作 非select下拉列表操作与网页元素操作一致,找到元素,定位元素,设置等待,点击元素等等 接下来操作百度的设置按钮 ...
- selenium中的元素操作之三大切换(二)
一.窗口切换 使用方法: 1.获取到打开的所有的窗口,句柄handles all_handles = driver.window_handles print(all_handles) 2.获取当前的窗 ...
- selenium处理隐藏元素的方法
<li class="navbar-nav-item "> <a href="#" id="cust"> ...
- CSS中 隐藏元素的常用方法
在CSS中,使某个元素在页面中消失的方法有很多,今天为大家介绍几种我常用的方式 . 一.display:none; 让元素直接从页面消失,不占用尺寸,会改变页面布局. 代码演示: 页面演示:在页面 ...
- python selenium中等待元素出现及等待元素消失操作
在自动化测试中,很多时候都会有等待页面某个元素出现后能进行下一步操作,或者列表中显示加载,直到加载完成后才进行下一步操作,但时间都不确定,如下图所示 幸运的是,在selenium 2后有一个模块exp ...
- selenium中的元素操作之三大等待(一)
等待时做什么,为什么使用等待 在做自动化测试,设计测试用例的时候,有时下一步的操作会依赖上一步的结果或者内容,上一步操作成功之后才能进行下一步操作等,这时候,我们就需要使用等待,来判断上一步操作是否完 ...
- selenium中等待元素的加载
在实际使用中,有时会出现一个元素还没有加载出来,导致无法获取,此时需要selenium处理来等待一段时间,此时处理方法有以下几种: 1.最笨.最简单但是最不推荐的方式: Thread.sleep(ti ...
随机推荐
- HTML5 drawImage性能问题
最近做游戏发现,为了节省HTTP请求,把很多组动画放到了一张图片上,也就是传说中的雪碧图,但是用drawImage从图片上截取一部分绘制在canvas上时会非常慢. 我的图片尺寸为5000*7000 ...
- MCS-51 单片机的中断系统
MCS-51 单片机的中断系统 MCS-51中断系统:5个中断源(两个外部中断, 两个定时器, 一个串口),2个优先级 中断相关概念 中断:当CPU正在处理某件事情时,单片机外部或内部发生的某一紧急事 ...
- Java流程控制练习--万年历
Java流程控制练习--万年历 标签: Java入坑之旅 0x01. 打印倒三角和正三角 public static void main(String[] args) { // TODO Auto-g ...
- vscodes使用(一): 常用插件,在线与离线安装
一.常用插件 1.Live server 浏览器实时刷新 插件安装成功后,会在底部工具栏中,显示个Go Live *.html文件,点击右键,可以看到live server两条指令 2.Esasy ...
- python的mock功能,感觉入门了~~~
主要实现语法有patch, patch.object, Mock(). 下面的测试太赤裸裸了,只是为了熟悉语法. import unittest from unittest.mock import p ...
- vue报错 ModuleBuildError: Module build failed: Error: `sass-loader` requires `node-sass` >=4. Please install a compatible version.
解决方法: 输入命令:cnpm install node-sass@latest
- zTree搜索
自写 zTree搜索功能 -- 关键字查询 -- 递归无限层 唠叨一哈 前两天朋友跟我说要一个ztree的搜索功能,我劈头就是一巴掌:这种方法难道无数前辈还做少了?自己去找,我很忙~然后我默默地蹲着写 ...
- selenium自动测试
import requestsimport sysimport iofrom selenium import webdriverfrom selenium.webdriver.common.actio ...
- JQuery 获取除某指定对象外的其他对象 :not() 与.not()
.not() 遍历方法 从匹配元素集合中移除元素 :not() 选择器 选取除了指定元素以外的所有元素 .siblings() 遍历方法 返回被选元素的所有同级元素 需排除对象单数个(1个) 获取 ...
- ftp服务及其实现之vsftpd
本文最早发布于我的51CTO博客,目前已迁移至博客园. 简介 FTP,File Transfer Protocol,文件传输协议 文件服务器,具备存储和共享文件(权限设置合理的情况下)的功能 命令端口 ...