元素exist/present/visible(vanish)/enable的区别
一、判断元素exist/present/visible(vanish)/enable的区别:
1、首先,从selenium代码上来区别:
1)exist/present表示元素个数是否大于0
List<WebElement> elements = driver.findElements(wrapper.getBy(locator));
return elements.size() > 0;
2)visible 检查是否可见
return driver.findElement(wrapper.getBy(locator)).isDisplayed();
3)enable 检查是否可编辑
return driver.findElement(By.cssSelector("a > font")).isEnabled()
2、其次, 从html源代码来看:
1)exist/present, 表示给出的locator, 整个html上是否能找到,可以用seleniumIDE 先去find,try一下是否有该元素;
2)visible, 是检查元素的样式或父级及以上元素含有不可显示属性,(隐藏一个元素可以用设置css的'visibility'属性为'hidden',也可以设置'display'属性为'none')
3)enable, 针对每个元素检查其特定属性, 比如, input 元素, 检查其是否 readonly
二、通过上面对几种元素检查的区别后, 现在对于以下这种异常解决就比较有的放矢~
Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with Command duration or timeout: 31 milliseconds
1)首先检查xpath, 确定元素是否present;
2) 检查元素是否visible, 通过element对象提供的isDisplayed()或者selenium IDE的 assertVisible来确认;
3)检查element是否存在多个地方:
选取元素的时候,可能存在两个相同的,但一次只会用一个,这两个区别就有一个样式的属性是不可见的,这个时候选取元素时要去掉不可见属性,如下例子:
WebElement label = driver.findElement(By.xpath("//
label[text()='User Name:' and not(contains(@style,'display:none'))]"));
display: block; 则是可见。
三、对于一些通过class属性设置某section是否显示,此时检查visibility,可以直接拿该元素(带上特定class属性值的元素)来判定
1)比如,某div如下:
<div id="accordians-ivrMenu-ivrAccordionPanel-prompt" class="x-collapsable-row x-collapsable-selected">
观察该div class变化, 可以看出, 当该div区域块里的内容不展示时, 该div元素变成:
<div id="accordians-ivrMenu-ivrAccordionPanel-prompt" class="x-collapsable-row">
所以,检查该div是否展示, 可以判断assertVisible元素:
//div[@id='accordians-ivrMenu-ivrAccordionPanel-prompt' and contains(@class,'x-collapsable-selected')]
2)再比如, 对input/textArea这种里面有填充默认值的, 测试时,检查鼠标定位到文本区域里后,默认值是否消失
界面:
- <div id="rc-gen248-transferTo" class="x-form-item x-form-item-align-left" style="">
- <label id="rc-gen248-transferTo-fieldLabel" class="x-form-label" style="width: 80px;" title="">Transfer to:</label>
- <div id="rc-gen248-transferTo-field" class="x-form-textfield x-form-emptyText-visible" style="width: 220px;">
- <input class="x-form-input" type="text" maxlength="64" value="" name="transferTo" onfocus="RC.Selection.clearSelection();" tabindex="1" style="text-align: left;">
- <div class="x-form-emptyText">Enter number</div>
- </div>
- </div>
要验证Enter Number是否消失的方式:
assertVisible: //div[contains(@id,'transferTo-field') and contains(@class,'x-form-emptyText-visible')] 判断是否返回false.
误区:
取getValue() //div[contains(@id,'transferTo')]//input
或者getText() //div[contains(@id,'transferTo')]//div[@class='x-form-emptyText'] 判断是否为空, 都是错误的
元素exist/present/visible(vanish)/enable的区别的更多相关文章
- display:none和visible:hidden两者的区别
display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别:display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是 ...
- CSS隐藏元素 display、visibility、opacity的区别
关于使指定元素无法在视野内看到,有3个方法 display: none; opacity: 0; visibility: hidden; 1.display: none; 该方法会改变页面布局. 元素 ...
- HTML元素的ID和Name属性的区别
HTML元素的ID和Name属性的区别今天突然兴致来了,想深究下这两属性的具体区别最classical的答案:ID就像是一个人的身份证号码,而Name就像是他的名字,ID显然是唯一的,而Name是可以 ...
- [JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的区别 、remove()区别
清空元素html("").innerHTML="" 与 empty()的区别 一.清空元素的区别 1.错误做法一: $(" ...
- spring bean中的properties元素内的ref和value的区别;* 和 ** 的区别
spring bean中的properties元素内的ref和value的区别 至于使用哪个是依据你所用的属性类型决定的. <bean id="sqlSessionFactory&qu ...
- 在元素上写事件和addEventListent()的区别
在元素上写事件和addEventListent()的区别1. onclick添加事件不能绑定多个事件,后面绑定的会覆盖前面的.而addEventListener能添加多个事件绑定,按顺序执行.2. a ...
- jquery中使元素显示和隐藏方法之间的区别
在实际的项目开发中,要使一个元素隐藏的方法有很多,比如css的多种属性和jquery的多种方法,虽然他们的作用都是使元素不可见,但是各个方法实现的原理是不一样的.下面主要介绍jquery各个元素隐藏方 ...
- CSS里有哪些常见的块级元素和行内元素以及其区别?
根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为“block”,成为“块级 ...
- css3伪类、伪元素选择器---nth-child()和nth-of-type()选择器的区别
p:nth-child(2) 要满足两个条件,1:选择的是p元素的父元素的第二个子元素 2:选择的第二个子元素必须是p元素,如果不满足,则将不显示 p:nth-of-type(2) 选择父元素下的 ...
随机推荐
- 第十三章、学习 Shell Scripts 善用判断式
善用判断式 利用 test 命令的测试功能 我要检查 /dmtsai 是否存在时,使用: [root@www ~]# test -e /dmtsai [root@www ~]# test -e /dm ...
- java定时任务接口ScheduledExecutorService
一.ScheduledExecutorService 设计思想 ScheduledExecutorService,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说 ...
- MySQL数据库加密与解密
数据加密.解密在安全领域非常重要.对程序员而言,在数据库中以密文方式存储用户密码对入侵者剽窃用户隐私意义重大. 有多种前端加密算法可用于数据加密.解密,下面我向您推荐一种简单的数据库级别的数据加密.解 ...
- ThinkPHP函数详解:C方法
C方法是ThinkPHP用于设置.获取,以及保存配置参数的方法,使用频率较高.了解C方法需要首先了解下ThinkPHP的配置,因为C方法的所有操作都是围绕配置相关的.ThinkPHP的配置文件采用PH ...
- USB移动硬盘WinPE启动盘的制作方法
USB移动硬盘WinPE启动盘的制作方法 软件:老九WinPE 老毛桃终于撒手无论版 发行时间:2007年9月11日 制作发行:老毛桃 作用:当系统坏了,无法进入时,用来做系统维护,备份文件.轻巧稳定 ...
- Android代码中设置背景图片
//设置背景图片 String picfile= Environment.getExternalStorageDirectory() + "/pdp/pdp.png" ...
- Mac联网恢复系统重新安装Lion
Mac的Lion系统,虽然不像Windows那样需要经常重装,但也难免会有要重置的时候,比如更换硬盘.本文介绍如何利用Mac的联网恢复系统进行Lion系统的在线恢复.Mac的在线恢复系统只在近几年的机 ...
- [RxJS] ReplaySubject
A ReplaySubject caches its values and re-emits them to any Observer that subscrubes late to it. Unli ...
- android122 zhihuibeijing 主页面使用fragment搭建
fragment的生命周期: onAttach()当fragment添加进Activity的时候调用(这个时候Activity对 ...
- 搜索引擎的提示效果完整的JavaScript代码
function divShow() { <%--判断输入的是否为空 如果为空则隐藏div 如果不为空则显示div --%> if ($("#tbxSearchKeywords& ...