【javawb】【定位页面元素】

【定位页面元素】

 

selenium-webdriver提供了强大的元素定位方法,支持以下三种方法。

单个对象的定位方法

多个对象的定位方法

层级定位 

定位单个元素

在定位单个元素时,selenium-webdriver提示了如下一些方法对元素进行定位。

 

 By.className(className))    

 By.cssSelector(selector)       

 By.id(id)                     

 By.linkText(linkText)          

 By.name(name)             

 By.partialLinkText(linkText)

 By.tagName(name)       

 By.xpath(xpathExpression)  

 

注意:selenium-webdriver通过findElement()\findElements()等find方法调用"By"对象来定位 和查询元素。By类只是提供查询的方式进行分类。findElement返回一个元素对象否则抛出异常,findElements返回符合条件的元素 List,如果不存在符合条件的就返回一个空的list。

1.使用className进行定位

当所定位的元素具有class属性的时候我们可以通过classname来定位该元素。

下面的例子定位了51.com首页上class为"username"的li。

Java代码

public class ByClassName {

    public static void main(String[] args) {

         WebDriver driver = new FirefoxDriver();

        driver.get("http://www.51.com");

         WebElement element = driver.findElement(By.className("username"));

         System.out.println(element.getTagName())

    }

}

输出结果:

Java代码

 

Li

2.使用id属性定位

51.com首页的帐号输入框的html代码如下:

Java代码

<input id="passport_51_user" type="text" value="" tabindex="1" title="用户名/彩虹号/邮箱"

name="passport_51_user">

 

在下面的例子中用id定位这个输入框,并输出其title,借此也可以验证代码是否工作正常。

 

Java代码

 

public class ByUserId {

public static void main(String[] args) {

// TODO Auto-generated method stub

WebDriver dr = new FirefoxDriver();

dr.get("http://www.51.com");

 

WebElement element = dr.findElement(By.id("passport_51_user"));

System.out.println(element.getAttribute("title"));

}

 

}

 

输出结果:

 Java代码

 

用户名/彩虹号/邮箱

 

3.使用name属性定位

51.com首页的帐号输入框的html代码如下:

 

Java代码

<input id="passport_51_user" type="text" value="" tabindex="1" title="用户名/彩虹号/邮箱"

name="passport_51_user">

 

使用name定位

 

Java代码

 

public class ByUserId {

public static void main(String[] args) {

// TODO Auto-generated method stub

WebDriver dr = new FirefoxDriver();

dr.get("http://www.51.com");

 

WebElement e = dr.findElement(By.name("passport_51_user"));  System.out.println(element.getAttribute("title"));

}

 

}

 

输出结果:

 Java代码

 

用户名/彩虹号/邮箱

 

4.使用css属性定位

51.com首页的帐号输入框的html代码如下:

Java代码

 

<input id="passport_51_user" type="text" value="" tabindex="1" title="用户名/彩虹号/邮箱"

name="passport_51_user">

 

使用css定位

Java代码

 

WebElement e1 = dr.findElement(By.cssSelector("#passport_51_user"));

 

选择器:.class、#id、*、element、element>element、element+element、[attribute=value]

 

5.使用 XPATH定位

51.com首页的帐号输入框的html代码如下:

Java代码

 

<input id="passport_51_user" type="text" value="" tabindex="1" title="用户名/彩虹号/邮箱"

name="passport_51_user">

 

通过xpath查找:

Java代码

 

WebElement element =driver.findElement(By.xpath("//input[@id=' passport_51_user ']"));

 

 

语法:http://www.studyofnet.com/news/466.html

 

 

【robot framework的写法】

1;Xpath=//*[@id=kw]

//表示某个层级下 *表示某个标签名 @id=kw表示这个元素有个id等于kw

找上级

<form id=form1 class=fm action=/s name=f1 >

<span class= bg s_ipt_wr>

  <input id=kw1 class=s_ipt type=text maxlength=100 name=wd utocpmplete=off>

找爸爸:

2;Xpath=//span[@class=bg s_ipt_wr]/input

 

如果爸爸没有唯一的属性值,可以找爷爷

Xpath=//form[@id=””form1]/span/input

一级一级往上找,直到找到html就是绝对路径

 

布尔值写法:

3;Xpath=//input[@id=kw and @name=wd]

 

先定位父级元素,再定位具体子元素:

WebElement类也可以支持查询子类元素。例如,假设页面上有一些重复的元素。但是,他们在不同的<div>中。可以先定位到其父元素<div>然后在定位其子元素,方法如下:

WebElement div = driver.findElement(By.id("div1"));

WebElement topLink = div.findElement(By.linkText("top"));

你也可以将他们缩写成一行:

WebElement topLink = driver.findElement

(By.id("div1")).findElement(By.linkText("top"));

 

6.使用其他方式定位

在定位link元素的时候,可以使用link和link_text属性;

 

假设页面元素写成这样:

<ahref="http://www.google.com/search?q=cheese">cheese</a>>

 那么可以通过这样查找:

WebElement cheese =driver.findElement(By.linkText("cheese"));

 

另外还可以使用tag_name属性定位任意元素;

7.定位多个元素

上面提到findElements()方法可以返回一个符合条件的元素List组。看下面例子。

Java代码

 

public class FindElementsStudy {

public static void main(String[] args) {

WebDriver  driver = new FirefoxDriver();

driver.get("http://www.51.com");

//定位到所有<input>标签的元素,然后输出他们的id

List<WebElement> element = driver.findElements(By.tagName("input"));

for (WebElement e : element){

System.out.println(e.getAttribute("id"));

}

driver.quit();

}

}

 

输出结果:

Java代码

 

passport_cookie_login

gourl

passport_login_from

passport_51_user

passport_51_password

passport_qq_login_2

btn_reg

passport_51_ishidden

passport_auto_login

 

上面的代码返回页面上所有input对象

 

8.层级定位

层级定位的思想是先定位父元素,然后再从父元素中精确定位出其我们需要选取的子元素。

层级定位一般的应用场景是无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。

下面的代码演示了如何使用层级定位class为"login"的div,然后再取得它下面的所有label,并打印出他们的文本

Java代码

public class LayerLocator {

public static void main(String[] args) {

 

WebDriver  driver = new FirefoxDriver();

driver.get("http://www.51.com");

 

//定位class为"login"的div,然后再取得它下面的所有label,并打印出他们的值

WebElement element = driver.findElement(By.className("login"));

 List<WebElement> el = element.findElements(By.tagName("label"));

 for(WebElement e : el)

System.out.println(e.getText());

 

}        

}

输出结果:

Java代码

 

帐号:

密码:

隐身

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

py编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值