原文地址:http://m.blog.csdn.net/m0_37553368/article/details/78016729
在基于RobotFramework框架使用Selenium2Library库对web系统做UI自动化时经常会遇到元素定位不到的问题,就我目前所遇到的情况,除元素本身定位有误外,大致有5类问题导致元素定位不到,即休眠时间较短、未进入frame、未进行窗口跳转、元素被隐藏、元素为只读。其中,元素被隐藏的解决方法我有参考网上的资料,参考链接见正文。
 
1. 等待时间太短,页面元素还没加载出来,或者没加载全。 ----------解决方案:加长等待时间

sleep    10
 
2. 元素在frame中,需要先进入该frame。有时一个页面内部分元素变化需要先跳出该frame再进入另一个frame
*1*进入frame后页面无变化 --------直接进入frame
*2*进入frame后页面有变化,比如执行搜索后页面展示的数据变化,对变化的数据进行操作
----需要先跳出该frame再进入另一个frame进行操作,有时候两个frame名称一样,但仍须先跳出
*3*进入嵌套frame进行操作 ------先进入外层frame,再进入内层frame,如果有多级嵌套的话,需要一级一级地进入,不能越级
需要关键字

select frame    frame ID或具体locator
 
3. 窗口跳转,在窗口“title1”执行一个操作后跳转到窗口”title2“,对后者的元素进行操作时如果不在脚本里执行窗口跳转的动作,就容易报元素找不到的问题。
需要关键字
select window    title2
4.元素被隐藏,对于元素属性为hidden的情况,需要先执行JS,使元素可见,再对元素进行操作
元素隐藏的方式有:
*1*在css中隐藏:
类型 案例 执行JS
visibility: hidden img#dice
 { float: right;
 margin-left: 2em;
visibility: hidden; }
document.getElementById("EleId").style.visibility="visible";
opacity: 0 img#dice
 { float: right; 
margin-left: 2em; 
opacity: 0; }
document.findElementById('EleId').style.opacity='1'
position: absolute img#dice
 { position: absolute;
 left: -1000px; }
增加left的值,例如:
document.findElementById('EleId').style.left='-2000px'
display: none img#dice { display: none; } document.findElementById('123').style.display
*2*表单中隐藏,例如:
<input type="hidden" name="field_name" value="value">
解决方案:将type="hidden" 改为 type="text",详见:http://blog.csdn.net/superit401/article/details/52094618
Execute Javascript    document.findElementByName('field_name').prop('type','text');
5.元素为只读属性。
 
比如上图 入职时间输入框,如果直接输入,会报错,这时将只读属性去掉即可,解决方案为,执行输入操作前,先执行:
Execute Javascript    document.getElementById('d4311').removeAttribute('readonly')

[转]RF+Selenium2Library元素定位不到的问题的更多相关文章

  1. RF(元素定位)

    1.id 定位 Open Browser https://www.baidu.com gc Input Text id=kw selenium #注意 id 的值 kw 没有用引号括起来 Close ...

  2. Robot Framework 教程 (2) - 页面元素定位

    上一篇文章中,简单模拟了一个baidu搜索并截图的过程,在搜索过程中,我们需要对搜索框.搜索按钮进行定位.本篇文章主要介绍一下具体的定位方法. 我们的脚本如下: *** Settings *** Li ...

  3. Robot FrameWork基础学习(四) 元素定位

    元素定位 对于web自动化测试来说,就是操作页面的各种元素,在操作元素之间需要先找到元素,换句话说就是定位元素. Selenium2Library提供了非常丰富的定位器: 虽然提供了这么多种定位方式, ...

  4. 【WEB自动化】【第一节】【Xpath和CSS元素定位】

    目前自动化测试开始投入WEB测试,使用RF及其selenium库,模拟对WEB页面进行操作,此过程中首先面对的问题就是对WEB页面元素的定位,几乎所有的关键字都需要传入特定的WEB页面元素,因此掌握常 ...

  5. RobotFramework自动化测试之元素定位

    前言:最近在做基于RF框架的Web自动化测试,其中涉及到元素的定位,主要用到id.name.xpath.css四中定位方法,尤其后面的两种方法特别有效,可以解决大部分的定位问题. id和name定位 ...

  6. robot_framewok自动化测试--(8)SeleniumLibrary 库(selenium、元素定位、关键字和分层设计)

    SeleniumLibrary 库 一.selenium 1.1.Selenium 介绍 Selenium 自动化测试工具,它主要是用于 Web 应用程序的自动化测试,但并不只局限于此,同时支持所有基 ...

  7. selenium元素定位篇

    Selenium webdriver是完全模拟用户在对浏览器进行操作,所有用户都是在页面进行的单击.双击.输入.滚动等操作,而webdriver也是一样,所以需要我们指定元素让webdriver进行单 ...

  8. Uiautomator--Uiselector元素定位

    一.UiSelector作用 按照一定的条件(例如控件的text值,资源id),定位界面上的元素.UiSelector对象的最终目的是去构造一个UiObject对象. 二.元素定位 1.根据text定 ...

  9. selenium使用笔记(三)——元素定位

    selenium进行自动化测试的一个很重要的东西那就是元素定位,如果元素都没法定位就无法操作它,也就无法进行自动化测试了.网上对于元素定位有很多的介绍,很详细很详细的,但是依然有很多新手总是会遇到无法 ...

随机推荐

  1. hihoCoder#1127 二分图三·二分图最小点覆盖和最大独立集

    原题地址 主要是介绍了两个定理: 1. 二分图最大匹配数    = 二分图最小点覆盖数 2. 二分图最小点覆盖数 = 二分图顶点数 - 二分图最小点覆盖数 注意,都是二分图 代码:(匈牙利算法) #i ...

  2. [luoguP2129] L国的战斗续之多路出击(模拟 || 矩阵)

    传送门 1.模拟 easy #include <cstdio> #define N 500001 int n, m; int X[N], Y[N], x[N], y[N], a = 1, ...

  3. Cmder使用总结

    windows cmd 使用不方便之处: 1.窗口size不能便捷缩放 2.复制文本,不能直接用鼠标拷贝,还需要多一道菜单操作:而且,还只能块状拷贝,而不是按行字符,极其不便 3.不支持多Tab页,多 ...

  4. jQuery操作元素的class属性

    今天在做一个菜单折叠插件的时候需要根据页面的url改变其class属性.jQuery操作元素的属性是非常方便的,在此记录一下: 1.给元素添加class属性: addClass(class) (1)添 ...

  5. [Bzoj1034][ZJOJ2008]泡泡堂BNB(贪心)

    1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3482  Solved: 1776[Submit][St ...

  6. 【.Net 学习系列】-- Windows身份模拟(WindowsIdentity.Impersonate)时读取Access数据库

    参考资料: WindowsIdentity.Impersonate https://msdn.microsoft.com/zh-cn/library/w070t6ka(v=vs.110).aspx A ...

  7. Go --- 设计模式(模板模式)

    模版模式真的是一个好东西.所谓模版模式,就是说,某几个类中相同的操作和代码提取到父类的一个函数中,并定义相同的操作为抽象函数.由子类来实现.估计我也没表达清楚,下面还是看代码来讲解吧. 例:我们有两个 ...

  8. C# Queue与RabbitMQ的爱恨情仇(文末附源码):Q与MQ消息队列简单应用(二)

    上一章我们讲了队列( Queue),这一章我们讲Message Queue消息队列,简称MQ. 定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开 ...

  9. Codeforces 344B Simple Molecules

    #include<bits/stdc++.h> using namespace std; int main() { int a,b,c; scanf("%d%d%d", ...

  10. 区分Integer.getInteger和Integer.valueOf、Integer.parseInt() 的使用方法

    Integer类有两个看起来很类似的静态方法,一个是Integer.getInteger(String),另外一个是Integer.valueOf(String).如果只看方法名称的话,很容易将这两个 ...