定位页面元素
1.id定位:
使用id属性值来定位,非常建议使用的一种定位方法。
注意:如果每次加载网页后,id属性值都不同,那么说明是开发人员使用代码动态生成的id属性值,不能作为定位依据。
例:
//向用户名文本框中输入jack
driver.findElement(By.id("username")).sendKeys("jack");
//向密码文本框中输入123
driver.findElement(By.id("password")).sendKeys("123");
2.name定位:
使用name属性值定位,比较建议使用的一种定位方法
例:
//向用户名文本框中输入rose
driver.findElement(By.name("username")).sendKeys("rose");
//向密码文本框中输入456
driver.findElement(By.name("password")).sendKeys("456");
3.linkText定位:
使用链接的文本来定位,是建议使用的定位方法
注意:只适用于链接,不适用于其他类型的页面元素
说明:
a.链接:标签名称是a的页面元素
b.链接文本:开始标签<a>和结束标签</a>之间的全部文本
c.<a>和</a>之间的子元素不能作为链接文本使用
例:
//点击“留言板”
driver.findElement(By.linkText("留言板")).click();
4.partialLinkText定位:
使用链接的一部分文本来定位,是建议使用的定位方法
注意:只适用于链接,不适用于其他类型的页面元素
例:
//点击包含“您的购物车中有”文本的链接
driver.findElement(By.partialLinkText("您的购物车中有")).click();
//点击包含“name”文本的链接
driver.findElement(By.partialLinkText("name")).click();
补充:
a.findElement方法:查找满足参数条件的第一个页面元素
例:
//点击包含“html”文本的第一个链接
driver.findElement(By.partialLinkText("html")).click();
b.findElements方法:查找满足参数条件的一组页面元素
5.通过编号定位:
(1)先使用findElements方法获得一组页面元素
(2)再使用get方法获得指定编号的页面元素
注意:get方法的参数编号从0开始
例:
//点击包含“html”文本的第2个链接
driver.findElements(By.partialLinkText("html")).get(1).click();
//点击来选中留言板页面中留言类型的第4个单选按钮
driver.findElements(By.name("msg_type")).get(3).click();
练习3.在Test12的testb方法,点击“留言板”之后,点击“您的购物车中有”之间,增加通过点击来选中留言板页面中留言类型的第4个单选按钮的步骤和等待3秒的步骤
6.className定位:
使用class属性值来定位,不建议直接在整个网页内使用该种定位方法,一般用于层级定位中较多
注意:查看网页元素的属性时,查看class属性的值,但是书写java测试代码时调用By类的className方法来定位
例:
//向用户名文本框中输入123
driver.findElement(By.className("spread")).sendKeys("123");
//点击“搜索”
driver.findElement(By.className("go")).click();
7.tagName定位:
使用标签名称定位,不建议直接在整个网页中使用,一般用于层级定位较多
例:
//点击左上角“ECSHOP”的图片
driver.findElement(By.tagName("img")).click();
//向留言内容文本域中输入“你好”
driver.findElement(By.tagName("textarea")).sendKeys("你好");
8.层级定位:
先定位到某个祖先元素,再在祖先元素的范围内二次定位其中某个后代元素
例:
//点击“登录”
driver.findElement(By.id("ECS_MEMBERZONE")).findElement(By.tagName("img")).click();
//点击搜索结果中“P806”的链接
driver.findElement(By.id("compareForm")).findElement(By.linkText("P806")).click();
//点击“注册”
driver.findElement(By.id("ECS_MEMBERZONE")).findElements(By.tagName("img")).get(1).click();
9.xpath定位:---重点
(1)xpath是在指定的文档中使用描述路径的方法来查找节点的表达式技术。
(2)xpath表达式分为:
a.绝对路径xpath表达式
例:“注册”的xpath表达式
/html/body/div[1]/div[2]/ul/li[1]/font/a[2]/img
b.相对路径xpath表达式--建议使用,因为更容易维护
例:“注册”的xpath表达式
.//*[@id='ECS_MEMBERZONE']/a[2]/img
(3)利用FirePath插件来生成xpath表达式的步骤:---重点
a.启动Firefox,打开被测系统
b.使用F12键打开Firebug
c.切换到FirePath的选项卡
d.点击左侧的第二个按钮(箭头)
e.点击被测系统网页内的元素
f.在FirePath的Xpath表达式文本框中复制表达式
练习4.获得“登录”的xpath表达式
.//*[@id='ECS_MEMBERZONE']/a[1]/img
获得“高级搜索”的xpath表达式
.//*[@id='searchForm']/a
获得“选购中心”的xpath表达式
.//*[@id='topNav']/a[2]
获得“查询该订单号”的xpath表达式
html/body/div[6]/div[1]/div[9]/div/div/form/input[2]
获得搜索后搜索结果下方“总记录数”的xpath表达式
.//*[@id='pager']/span/b
(4)使用xpath定位的测试代码
例:点击“注册”
driver.findElement(By.xpath(".//*[@id='ECS_MEMBERZONE']/a[2]/img")).click();
//点击“完成”
driver.findElement(By.xpath("html/body/form/table/tbody/tr[5]/td/input[1]")).click();
//*[@value='完 成']
10.cssSelector定位:---了解
driver.findElement(By.cssSelector("input..firepath-matching-node")).click();
#ECS_MEMBERZONE > a > img
总结:
建议使用:id、name、linkText、partialLinkText、层级定位、编号定位、xpath
不建议使用:className、tagName、cssSelector