selenium的8种定位方式(java举例)

已经存在webdriver实例化的对象

 WebDriver driver=new FirefoxDriver();

1. By.name()

通过元素的name属性查找,但是如果元素较多的话,定位困难,尤其存在多个相同的name属性的时候

 dr.findElement(By.name("name")).clear();

 

2.By.id()

通过元素的id属性命名,一般来说id比name精确,一般来说一个页面内id值都不会同名

dr.findElement(By.id("password")).sendKeys(pwd);

3.By.className()

通过元素的类名查找,一般页面中,多个元素都可能属于同一个class类,也有一个元素属于多个class类的情况,使用不是很多

 

4.By.tagName()

通过元素的标签名查找,一般用的少,一般一个页面有多个<a>标签、<input>标签,一般会查找个多个元素,但是可以通过list 去接收,然后循环foreach循环找到需要的元素,如下

 public void ce() {
      dr=new FirefoxDriver();
      dr.get("http://crm.cloud.5kcrm.com/");
      WebElement tg1 = null;
      List<WebElement>  tagnames= dr.findElements(By.tagName("input"));
      for (WebElement tg:tagnames){
          if(tg.getAttribute("name").equals("password")){
              tg1=tg;
              break;
          }
      }
      System.out.println(tg1.getTagName().toString());
         
  }

5. By.linkText()

通过<a>标签链接的内容进行查找

如html中

<a>组织架构</a>

 

那么这样写

  dr.findElement(By.linkText("组织架构")).click(); 

6. By.partialLinkText()

是linktest进一部的简化使用,<a>标签内容的局部匹配

如html中

<a>组织架构</a>

那么这样写

  dr.findElement(By.partiallinkText("组织")).click(); 

7. By.xpath()

强大的匹配工具,主要通过位置来匹配,有相对位置和绝对位置,如下:

 dr.findElement(By.xpath(".//*[@id='popOverBox']/input[2]")).click();//相对位置
dr.findElement(By.xpath(
"html/body/div[9]/div[2]/form/div[1]/div/input")).sendKeys("测试部门");//绝对位置

 

 

 

(1)匹配属性

 

dr.findElement(By.xpath(“//a[contains(@href, 'ces')]”));//href中包含'ces'的a的标签

 

 

(2)匹配字符

 

dr.findElement(By.xpath("//a[contains(text(),'办')]"));//匹配a标签中包含“办”的文字如<a>办公室</a>

 

 

(3)匹配兄弟元素、父元素等等

 

可以参照w3school中的轴的使用

8. By.cssSelector()

通过css的选择器进行元素的查找

html中的css选择器使用方式如下

ID选择器:

  #idName{}样式唯一;

类选择器:

  .className{}样式共用;

标签选择器

  html自带的标签;


优先级:ID>类>标签选择器

 .name a{}   

    name类下的a标签进行样式修改

  a,p{}

    a、p两种标签样式同时修改

 

 但是cssSelector中的递进关系是用【>】进行的,css选择器择是用空格进行的递进关系

dr.findElement(By.cssSelector(".controls>textarea[name='description']")).sendKeys("测试测试");
//这里.controls表示class名为controls;textarea表示标签名,name表示textarea中的属性名

 

posted @ 2017-07-28 15:14  来呀快活吧  阅读(489)  评论(0编辑  收藏  举报
cs