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

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

先来看元素定位的方式

          //使用id定位
          userName = driver.findElement(By.id("TANGRAM__PSP_8__userName"));
          //使用class定位
          userName = driver.findElement(By.className("pass-text-input pass-text-input-userName"));
          //使用name定位
          userName = driver.findElement(By.name("userName"));
          //使用xpath定位
             //绝对路径
          userName = driver.findElement(By.xpath("/html/body/div[6]/div[2]/div[2]/div/div/div/div/div/div[1]/form/p[5]/input"));
             //使用元素属性值定位
          userName = driver.findElement(By.xpath("//*[@id=‘TANGRAM__PSP_8__userName‘]"));
             //或者先定位父层级元素
          userName = driver.findElement(By.xpath("//*[@id=‘TANGRAM__PSP_8__userNameWrapper‘]/input"));
             //使用逻辑运算符
          userName = driver.findElement(By.xpath("//*[@id=‘TANGRAM__PSP_8__userName‘ and @name=‘userName‘]"));
             //contains 包含某个属性
          userName = driver.findElement(By.xpath("//input[contains(@id,‘TANGRAM__PSP_8__userName‘)]"));

漏了一种还有css定位,一般来说在项目中用xpath和css基本能定位所有元素了,但是从效率上来讲的话还是css比较高。个人比较喜欢用xpath定位,id、class、name、tagname等等这些容易出现定位不到的情况,并且有些元素的属性还是动态变化的,如果用这些定位方法来定位的话容易出错。就拿xpath来说吧,当我们出现一个元素定位不到的时候该怎么处理呢?我说下我的思路:

1.查看html,看下这个元素是否被包在iframe等框架中,如果是有框架的话是需要切换框架的,以163邮箱登陆为例:

<html style="display: block;">
<head>
<body class=" move" style="padding-top: 0px;">
<header class="header">
<section id="mainBg" class="main" style="background-color: rgb(249, 249, 249);">
<div id="mainCnt" class="main-inner" style="background-image: url("http://mimg.127.net/m/lc/img/LoginBackgroundPic/1061/2/promPic.jpg");">
<div id="loginBlock" class="login tab-2">
<div class="loginFunc">
<div id="appLoginTab" class="loginForm">
<div id="normalLoginTab" class="loginForm">
<div class="loginWrap">
<div id="loginDiv" class="loginUrs" style="width: 295px; height: 413px;">
<iframe id="x-URS-iframe" frameborder="0" name="" scrolling="no" style="width: 100%; height: 100%; border: medium none; background: none repeat scroll 0% 0% transparent;" src="http://dl.reg.163.com/webzj/m163_1.0.1/pub/index_dl.html?wdaId=">
<!DOCTYPE html>
<html>
<head>
<body>
<div id="confirm" class="m-confirm f-dn">
<div id="cnt-box-parent" class="g-bd cnt-box-include">
<div id="loading" class="loading f-dn">
<div id="cnt-box" class="g-bd">
<div class="m-header">
<div class="m-cnt">
<form id="login-form">
<div id="auto-id-1482585786268" class="m-container">
<div id="account-box" class="inputbox">
<div class="u-logo">
<div id="auto-id-1482585786267" class="u-input box">
<label id="auto-id-1482585786237" class="u-label f-dn" style="display: block;">邮箱帐号或手机号</label>
<input id="auto-id-1482585786223" class="j-inputtext dlemail" type="text" spellcheck="false" tabindex="1" autocomplete="off" data-required="true" data-type="email" name="email" data-placeholder="邮箱帐号或手机号" placeholder="邮箱帐号或手机号" style="width: 122px;">

可以看到账号输入框是在一个iframe框架中的,我们必须要切换框架才能定位到账号输入框,如何切换呢,很简单,定位iframe,然后切换

WebElement frame = dr.findElement(By.xpath("//*[@id=‘x-URS-iframe‘]"));
      dr.switchTo().frame(frame);

2.如果是没有框架呢,还是定位不到,对了还要注意看报错信息,是无法定位到这个元素还是这个元素是不可见的。我们进行自动化测试的时候容易有个误区,就是想当然的以自己的逻辑去进行一个操作,而忽略了程序本身对这个逻辑的处理。举个例子,我们登陆的时候需要先点击登陆按钮,弹出登录小窗口再进行登陆。有的童鞋就直接定位账号密码输入框,自动化嘛,怎么简单怎么来,这当然是不行的。再写脚本的时候一定要注意,手工怎么点的,脚本就怎么写,怎么一步步执行,都不能漏。如果不能定位到元素就看下是不是对这个元素进行定位之前漏掉了什么操作。

3.定位的时候不要过分的相信自己写的代码。例如我写了个下面的定位,怎么检查代码都没有问题就是定位不到。这个时候就不要急,先查出是这个元素本身的问题还是写的代码的问题,使用另外一种定位方式再进行定位确定是不是自己定位写的有问题。我在群里经常看到许多童鞋粘上自己的代码就说写的没问题啊怎么就是定位不到,然后群里的热心朋友给他重写了个定位,他满心欢喜的一试,呀可以了就不了了之了,不从自身找下为什么定位不到的原因。

userName = driver.findElement(By.xpath("//*[@id=‘TANGRAM__PSP_8__userNameWrapper‘]/input"));

4.当元素结构比较复杂的时候,学会灵活运用定位方式,像多利用这种包涵的定位方式可以更好的解决问题。

//contains 包含某个属性

userName = driver.findElement(By.xpath("//input[contains(@id,‘TANGRAM__PSP_8__userName‘)]"));

总之元素定位是不难的,要多练,定位不到自己解决,自己反思是哪里出的问题,这样才能提高自己。

时间: 2024-08-27 10:12:24

selenium使用笔记(三)——元素定位的相关文章

Selenium webdriver 学习总结-元素定位

Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要高些,使用id,name属性定位元素是最可靠,效率最高的一种办法. 1.工具选择:在我们开发测试脚本的过程中各个浏览器给我们也提供了方便定位元素的工具,我比较喜欢使用firefox的firebug工具,也是目前很多开发测试人员比较热衷的选择,原因是firefox是唯一能够集成selenium IDE

[小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位

无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元素的过程.这一篇我们就开始给大家介绍一下Selenium中是如何定位DOM元素的.本文将会介绍如下内容: Selenium DOM 主要的定位方式. Selenium 如何扩展元素定位方式. 辅助浏览器工具 (一)Selenium DOM主要定位方式 上一篇中,我们介绍了WebDriver 和 We

selenium+python自动化之元素定位

自动化按步骤拆分的话,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇接下来讲基本的八种元素定位方法.说的通俗一点,就是教大家找对象. 万物皆对象,所谓的对象,就是你喜欢的那个女神,她就是你的对象.既然是对象,她就有属性,比如眼睛大,头发长,皮肤白,颜值高.这些都是她的属性,每个属性又有对应的属性值,如眼睛="大",头发="长",颜值="高",对应的=后面就是它的属性的值. 同样的道

Selenium(一)元素定位的方法

在Selenium中定位元素有七种方法: 1. identifier定位 这是最普遍的一种定位方式,在Selenium中默认为identifier定位,在这种策略下,第一个使用id的页面元素将被识别出来,如果没有使用指定id的元素,那么将识别第一个名字与指定条件相符的元素.例如:identifier=Continue  //定位页面元素为Continue因为identifier定位是默认方式,因此"identifier=" 可以不写. 2. id定位(最常用) 这种定位方式比ident

Selenium基本用法以及元素定位

一.Selenium 简介 Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,提供一套测试函数,用于支持Web自动化测试.函数非常灵活,能够完成界面元素定位.窗口跳转.结果比较.他支持IE.Firefox.Safari.Chrome.Android手机浏览器,也支持Java.C#.Python.Ruby.PHP等语言,支持如Windows.Linux.IOS.Android等操作系统,是一套为web自动化测试量身定制的web框架, Selenium框架由多个工

java selenium webdriver实战 页面元素定位

自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选择下拉列表中的那个下拉列表或者输入框中输入什么值 其中定位页面元素是三步骤的第一步,本篇介绍常用的定位方法 webDriver对象的findElement函数用于定位一个页面元素,findElements函数用户定位多个页面元素,定位的页面元素使用webElement对象进行存储 常用的方法有: 1

Selenium基本使用(三)元素判断

一.由于有些页面加载完后,某些元素还没有加载,这样就会导致异常,脚本稳定性变差 为了解决这个问题,selenium提供了WebDriverWait以及两种方法进行判读: 显示判断和隐式判断 显示expected_conditions类,提供预期条件判断: from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ex W

Appium学习笔记4_元素定位方法

Appium之元素定位,如果对Android上如何使用工具获取页面元素有问题的,请转战到这:http://www.cnblogs.com/taoSir/p/4816382.html. 下面主要是针对自己的了解和学习,简单的总结下关于Appium native APP上的一些元素定位方法的使用以及通过UI Automator Viewer定位页面以后,如果从上面定位到你想使用的元素. 已淘宝为例,来进行元素的定位.打开UI Automator Viewer Appium和Webdriver有一点区

selenium(一):元素定位

selenium是一种进行自动化测试的工具,在python也可以使用来进行自动化测试. selenium可以肤浅的理解为:一个网页,模拟人的各种操作,比如点击按钮,输入信息等等.我们今天就来说说如何定位我们要点击的按钮,或者是要输入信息的信息框 ----------------------------------------------------------------------------------------------------- browser.find_element_by_c

Selenium自动化测试之学会元素定位

这是我经常被问到的一个问题,也是我很讨厌回答的问题,因为要想回答这个问题需要知道上下文.什么样式的元素,有哪些属性,是否有表单嵌套,都尝试了哪些定位方法...而且没几个提问者能事先详细的说明这些.哪儿像提bug一样描述重现步骤,而且每一步都截图,生怕开发重现不了.反正,向我提问者没见过这样的,大多就报着试试态度,你爱回不回,碰碰运气说不定就回我了. 当然,我写这一篇文章的目的肯定不是为了吐槽,我是打算拿这个链接丢给他看,所以,这里会总结常见几种情况,以及解决办法.如果本文能不解决你的问题,你问我