zoukankan      html  css  js  c++  java
  • [selenium webdriver Java]元素定位——findElement/findElements

    策略语法语法描述
    By id driver.findElement(By.id()) driver.findElements(By.id()) 通过id属性定位元素
    By name driver.findElement(By.name()) driver.findElements(By.name()) 通过name属性定位元素
    By class name driver.findElement(By.className()) driver.findElements(By.className()) 通过class属性定位元素
    By tag name driver.findElement(By.tagName()) driver.findElements(By.tagName()) 通过HTML标签名定位元素
    By link text driver.findElement(By.linkText()) driver.findElements(By.linkText()) 通过链接内容定位元素
    By partial link text driver.findElement(By.partialLinkText()) driver.findElements(By.partialLinkText()) 通过部分链接内容定位元素
    By css driver.findElement(By.cssSelector()) driver.findElements(By.cssSelector()) 通过css选择器定位元素
    By xpath driver.findElement(By.Xpath()) driver.findElements(By.Xpath()) 通过xpath定位元素

    findElement:

    1. By id

    使用id,name,class属性是定位元素的首选方法。其中,用元素的id是最首选的方法,是最快速的策略。

    当发生下列情况时,无法使用id属性:

    • 不是所有的页面元素都拥有id属性
    • id属性的值是动态生成的

    2. findElement()方法定位元素时,会查询整个DOM,然后返回第一个匹配的元素

    3. WebElement类可支持查询子类元素。假设页面上有一些重复的元素,它们有不同的父元素。我们可以先定位其父元素,然后定位其子元素,方法如下:

    WebElement father = driver.findElement(By.id("father"));
    WebElement son = father.findElement(By.linkText("xxx"));

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

    1 WebElement son = driver.findElement(By.id("father")).findElement(BylinkText("xxx"));

    4. NoSuchElementFoundException

    findElement()和findElements()方法找不到相应的元素时,会抛出该异常。

    findElements:

    Selenium WebDriver的findElements()方法,可以得到指定规则的集合,适用于需要在一组相似的元素上进行操作的情况。

    例:验证百度首页导航链接的数量,并打印出它们的超链接地址

    实现代码:

     1 import java.util.List;
     2 
     3 import org.openqa.selenium.By;
     4 import org.openqa.selenium.WebDriver;
     5 import org.openqa.selenium.WebElement;
     6 import org.openqa.selenium.chrome.ChromeDriver;
     7 import org.testng.annotations.Test;
     8 
     9 import com.thoughtworks.selenium.SeleneseTestNgHelper;
    10 
    11 public class FindElements {
    12 
    13     @Test
    14     public void test(){
    15         System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
    16         WebDriver driver = new ChromeDriver();
    17         driver.get("http://www.baidu.com");
    18         List<WebElement> links = driver.findElements(By.cssSelector("#u1 a"));
    19         //获取集合中元素的总数量并转为String格式(下方assertEquals方法参数格式要求)
    20         String size = String.valueOf(links.size());
    21         //String size = Integer.toString(links.size());
    22         //String size = links.size()+"";
    23         //验证链接数量
    24         SeleneseTestNgHelper.assertEquals("8", size);
    25         
    26         //打印href属性
    27         //通过for循环获得list中的所有元素,再调用getAttribute()方法得到元素的属性
    28         for(int i=0; i<links.size();i++){
    29             System.out.println(links.get(i).getAttribute("href"));
    30         }
    31         driver.quit();
    32     }
    33 }

    运行结果:

     

  • 相关阅读:
    自从学会了搭建开源网站,妈妈再也不担心我找不到web自动化学习环境啦!
    领导要我6点下班前创建1000个有效的手机号,现在5点半了!教你用random模块10分钟搞定!
    python:字符串 扩展分片:第三个限制值
    python字符串:索引和分片
    测试基础:测试用例设计策略
    测试基础:软件测试思维方式
    面试整理:python列表面试习题
    面试整理:linux
    测试的一些思考
    python ConfigParse模块中的方法
  • 原文地址:https://www.cnblogs.com/missPersist/p/4187238.html
Copyright © 2011-2022 走看看