元素exist/present/visible(vanish)/enable的区别

时间:2022-12-12 16:09:24

一、判断元素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这种里面有填充默认值的, 测试时,检查鼠标定位到文本区域里后,默认值是否消失

界面:

元素exist/present/visible(vanish)/enable的区别

<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的区别的更多相关文章

  1. display&colon;none和visible&colon;hidden两者的区别

    display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别:display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是 ...

  2. CSS隐藏元素 display、visibility、opacity的区别

    关于使指定元素无法在视野内看到,有3个方法 display: none; opacity: 0; visibility: hidden; 1.display: none; 该方法会改变页面布局. 元素 ...

  3. HTML元素的ID和Name属性的区别

    HTML元素的ID和Name属性的区别今天突然兴致来了,想深究下这两属性的具体区别最classical的答案:ID就像是一个人的身份证号码,而Name就像是他的名字,ID显然是唯一的,而Name是可以 ...

  4. &lbrack;JS&rsqb;&lbrack;jQuery&rsqb;清空元素html&lpar;&quot&semi;&quot&semi;&rpar;、innerHTML&equals;&quot&semi;&quot&semi; 与 empty&lpar;&rpar;的区别 、remove&lpar;&rpar;区别

    清空元素html("").innerHTML="" 与 empty()的区别 一.清空元素的区别     1.错误做法一:           $(" ...

  5. spring bean中的properties元素内的ref和value的区别;&ast; 和 &ast;&ast; 的区别

    spring bean中的properties元素内的ref和value的区别 至于使用哪个是依据你所用的属性类型决定的. <bean id="sqlSessionFactory&qu ...

  6. 在元素上写事件和addEventListent&lpar;&rpar;的区别

    在元素上写事件和addEventListent()的区别1. onclick添加事件不能绑定多个事件,后面绑定的会覆盖前面的.而addEventListener能添加多个事件绑定,按顺序执行.2. a ...

  7. jquery中使元素显示和隐藏方法之间的区别

    在实际的项目开发中,要使一个元素隐藏的方法有很多,比如css的多种属性和jquery的多种方法,虽然他们的作用都是使元素不可见,但是各个方法实现的原理是不一样的.下面主要介绍jquery各个元素隐藏方 ...

  8. CSS里有哪些常见的块级元素和行内元素以及其区别?

    根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为“block”,成为“块级 ...

  9. css3伪类、伪元素选择器---nth-child&lpar;&rpar;和nth-of-type&lpar;&rpar;选择器的区别

    p:nth-child(2) 要满足两个条件,1:选择的是p元素的父元素的第二个子元素   2:选择的第二个子元素必须是p元素,如果不满足,则将不显示 p:nth-of-type(2) 选择父元素下的 ...

随机推荐

  1. 用Maven部署war包到远程Tomcat服务器

    过去我们发布一个Java Web程序通常的做法就是把它打成一个war包,然后用SSH这样的工具把它上传到服务器,并放到相应的目录里,让Tomcat自动去解包,完成部署. 很显然,这样做不够方便,且我们 ...

  2. mysql中使用 where 1&equals;1和 0&equals;1 的作用

    操作mysql的时候,经常使用where语句进行查询.当where语句不存在的时候,经常在后面加一个where 1=1 where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可 ...

  3. winform 可拖动的自定义Label控件

    效果预览: 实现步骤如下: (1)首先在项目上右击选择:添加->新建项,添加自定义控件 (2)自定义的一个Label让它继承LabelControl控件,LabelControl控件是DevEx ...

  4. C&plus;&plus; 与设计模式学习(其一)

    记得曾经一年前,听到同学再说设计模式,当时觉得不怎么重要,所以就没有去系统的学习,这一放,就是一年,直到前段时间,面试了一个阿里巴巴的职位,要我谈谈对于设计模式的看法. 之后就好好了看了一些文章,好好 ...

  5. poj 3641 Pseudoprime numbers(快速幂)

    Description Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a ...

  6. Windows&lpar;64位IIS&rpar;未在本地计算机上注册&OpenCurlyDoubleQuote;Microsoft&period;Jet&period;OLEDB&period;4&period;0”提供程序

    在Windows 7(32位)用.Net开发的Excel导入数据表功能,测试后一切正常,站点发布挪到Windows Server 2008(64位)上就意外了,出现错误提示,运行程序,抛出异常:未在本 ...

  7. PS图像特效算法——镜像渐隐

    这个特效的实现,可以先利用前面提到的渐变特效,做一个图像的渐变, 然后将原图与渐变图对称放置,将背景设置成黑色. clc; clear all; close all; Image=imread('4. ...

  8. 开发中遇到的css兼容问题

    1. overflow: scroll(平台兼容) 在Mac中的Chrome浏览器中,内容不超过容器时不会出现滚动条: 在Wins中的Chorme浏览器中,内容不超过容器时也会出现滚动条. 解决方法: ...

  9. ASP&period;NET Core Building chat room using WebSocket

    Creating “Login form” We use here simple form where user can insert his or her preferred nick name f ...

  10. 解决从pip上下载的最新flask版本不能运行flaskr和最新特性的问题

    由于在测试flask的单元测试.所以准备弄个环境,查询官方文档发现flask源码里面有一个example文件夹里面有个flaskr应用 可供测试 看了一下readme文档,大致是这样 / Flaskr ...