各种元素不能定位问题

一、元素定位

A. Click Element + xpath 
B. Click Element + contains 
C. Execute Javascript + getElementsById 
D. Jquery 
E. Execute Javascript + getElementsByClassName

二、用例:修改用户信息

  1. 登录
  2. 点击用户的“基本资料”
  3. 修改用户信息
  4. 确定
  5. 检测结果

预期测试用例

实际测试用例

三、各种元素不能定位问题

A. 昵称元素:id vs. xpath 
没有提供 id 元素,改用 xpath 相对路径定位(使用相对路径,即使上层节点改变也不会受到影响。例如,父节点或者祖父节点改变)。 
绝对路径:/html/body/form/div[3]/div[2]/div[2]/div/div[2]/ul/li[1]/input 
相对路径://ul[@class=’user-imfor-bar’]/li/input

Input Text  xpath=//ul[@class='user-imfor-bar']/li/input    Allan
  • 1

B. 性别元素:Select Radio Button vs. Click Element 
观察页面设计,性别元素是个 Radio。但是,在使用 Select Radio Button 时,并没有生效。尝试用 xpath 的相对路径去定位,也失效。最后,尝试用 contains 方法,成功。

Click Element   xpath=//*[@id="sexchange"]/label[contains(text(), '男')] #性别
Click Element xpath=//*[@id="sexchange"]/label[2][contains(text(), '女')] #性别
  • 1
  • 2

C. 生日元素:Select From List By Value vs. (Click Element & Execute Javascript) 
观察页面设计,生日元素是个 List。但是,在使用 Select From List By Value 时,并没有生效。

网页源代码中,并没有提供 locator & value 和 locator & index 的方式定位。而是将两者分开。

所以,改为 Click Element 定位。分两步走:先点击下拉栏,再选择年月。

Click Element   selectpick_span_select_year #年
sleep 3
Click Element xpath=//ul[@class='user-imfor-bar']/li[3]/div[1]/div/div[2]/ul/li[10]
sleep 3
  • 1
  • 2
  • 3
  • 4

下面就有点让人抓狂了,T T! 
在选择下拉日期的时候,定位不到元素 id=selectpick_span_select_day。

Click Element   selectpick_span_select_day  #日
sleep 3
  • 1
  • 2

还好提供了 id,尝试用 Execute Javascript 的 getElementsById 方法定位,成功。

Execute Javascript  document.getElementById('selectpick_select_day').click()    #日
  • 1

在选择日期的时候,报错:Element … is not clickable at point。

FAIL    WebDriverException: Message: unknown error: Element <label>...</label> is not clickable at point (1194, 949). Other element would receive the click: <li style="font-size:13px;height:42px; line-height:42px;">...</li>
  • 1

应该是元素被覆盖,只能调整策略,使用 contains 方法。

Click Element   xpath=//ul[@class='selectpick_ul_select_day']/li/label[2][contains(text(), '15')] #15为日期
# 也可以使用传参方式
${date} Set Variable 15
Click Element xpath=//ul[@class='selectpick_ul_select_day']/li/label[2][contains(text(), '${date}')]
  • 1
  • 2
  • 3
  • 4

D. 点击确定元素: Click Element + jquery 
没有提供 id,也无法 xpath 定位。

Click Element   dom=$("input[class='percenter-content-input']")    #确定
  • 1

四、用例:立即学习

  1. 登录,搜索课程
  2. 进入“课程详情”
  3. 点击“课程大纲”
  4. 随机点击“立即学习”
  5. 进入“学习课程”

E. 立即学习元素:Execute Javascript +getElementsByClassName 
立即学习元素是隐藏元素,定位不到。xpath 方法的相对和绝对路径都无法定位。

Click Element   xpath=//div[@class="cacc-kcdg-box"]/div[2]/ul/li[${index}]/a/div
  • 1

需要随机点击“立即学习,但是 Execute Javascript 没有提供 getElementByXpath 方法。尝试 getElementsByClassName 方法。

${index}   Evaluate    random.randint(0, 10)   random  #产生课程随机数
Execute Javascript document.getElementsByClassName('caccb-kcdg-play')[${index}].childNodes[0].click();
  • 1
  • 2

RobotFramework测试问题二:各种元素不能定位问题的更多相关文章

  1. Robotframework测试相关库的简单整理

    一. 官网地址 http://robotframework.org/#libraries 二.几类测试所用到的常用库初步整理 1. UI自动化测试 Selenium2Library.BuiltIn(自 ...

  2. Robotframework测试相关库

    一. 官网地址 http://robotframework.org/#libraries 二.几类测试所用到的常用库初步整理 1. UI自动化测试 Selenium2Library.BuiltIn(自 ...

  3. WPF命中测试示例(二)——几何区域命中测试

    原文:WPF命中测试示例(二)--几何区域命中测试 接续上次的命中测试,这次来做几何区域测试示例. 示例 首先新建一个WPF项目,在主界面中拖入一个按钮控件,并修改代码中的以下高亮位置: 当前设计视图 ...

  4. Selenium测试专项二班隆重开班

    Selenium测试专项二班隆重开班 应广大测试技术人员要求,以及企业技术需求.Selenium提前一周开课了,只针对合作的每家企业提供1-2个参训名额.预计培训60人次.但报名人数却远远超出我们预期 ...

  5. robotframework接口测试(二)—post request

    第5行:发起post请求.因为我写了好多的参数,所以这样写的. 也可以这样写 其他行:可见[robotframework接口测试(二)—get request json]

  6. 异数OS TCP协议栈测试(二)--短连接篇

    异数OS TCP协议栈测试(二)--短连接篇 本文来自异数OS社区 github:   异数OS-织梦师(消息中间件)群: 476260389 测试目标 TCP 短链接IO性能测试,Client Se ...

  7. Selenium+Python系列(二) - 元素定位那些事

    一.写在前面 今天一实习生小孩问我,说哥你自动化学了多久才会的,咋学的? 自学三个月吧,真的是硬磕呀,当时没人给讲! 其实,学什么都一样,真的就是你想改变的决心有多强罢了. 二.元素定位 这部分内容可 ...

  8. RobotFrameWork接口报文测试-----(二)demo的升级版

    在上一篇,简单的demo实现了讲xml的数据发送服务器端并取得recvi_buf,然后进行了简单的解析的操作.现在就要解决之前提过的2个问题: 1. 步骤这么多,难道每写一个脚本都要重复一次么? 2. ...

  9. Robot Framework自动化测试(二)---元素定位

    说明: 不要误认为Robot framework 只是个web UI测试工具,更正确的理解Robot framework是个测试框架,之所以可以拿来做web UI层的自动化是国为我们加入了seleni ...

随机推荐

  1. linux文本格式转换

    问题:在linux环境下面执行SH的可执行文件. -bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory 解决 ...

  2. oracle 表空间创建和删除

    oracle数据库:数据库对象以及表数据都存储在表空间中,创建用户时可以指定对应的表空间.这样用户可以在各自的表空间中操作数据,互不干扰. 1. 表空间创建 若不清楚表空间对应文件的路径,可以登录系统 ...

  3. PHP Laravel定时任务Schedule

    前提:本文方法是利用Linux的crontab定时任务来协助实现Laravel调度(Mac也一样). 一.首先添加Crontab定时任务,这里只做简单介绍. 用命令crontab -e 添加如下内容 ...

  4. Socket 多线程编程

    前面一片学习了TCP/IP的基础网络编程,并给出了简单的服务端与客户端通信交互的例子.还介绍了UPC的通信例子. 这次学习TCP/IP的多线程编程.因为涉及到TCP/IP一般都是多线程,服务端会一直监 ...

  5. pyhton 核心编程 正则表达式习题

    方案一 import re #1. 识别下列字符串:“bat,” “bit,” “but,” “hat,” “hit,” 或 “hut” import re def test1(self): bt = ...

  6. 79、iOS 的Cocoa框架、Foundation框架以及UIKit框架

    Cocoa框架是iOS应用程序的基础 1. Cocoa是什么? Cocoa是 OS X和ios 操作系统的程序的运行环境. 是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发 ...

  7. 修改chrome浏览器默认css样式的方法

    最近重新用起了ubuntu kylin,然后又碰到之前让我感到有些难受的一个小问题:用chrome浏览部分网页时,一部分粗体字十分难看,就像是宋体直接加粗那样. 之前就觉得这样看起来很难受,但是找到的 ...

  8. C#延时函数

    用Thread方法: 先using system.threading; 再在需要延时的进程处插入 thread.sleep(int);

  9. 第34章:MongoDB-索引--用户管理

    ①用户管理 在MongoDB里面默认情况下只要是进行连接都可以不使用用户名与密码,因为要想让其起作用,则必须具备以下两个条件: ·条件一:服务器启动的时候打开授权认证: ·条件二:需要配置用户名和密码 ...

  10. Chrome书签添加到百度网盘

    一:Chrome是最干净的浏览器了,但是无奈国内的环境导致书签不方便保存到云端,如果保存到本地那么就要经常自己备份之类的: 二:由以上的需求背景终于找到了可以将chrome打开的网页保存到百度网盘里[ ...