要做自动化,首先要打听页面结构,要询问页面结构,就要询问页面成分的永恒方法

在动用selenium
webdriver进行成分定位时,平常采用findElement或findElements方法结合By类再次来到的因素句柄来稳定成分。

常用的因素定位方法如下:

 

XML 1

如何抉择 定位方法

  策略是:拔取简单,稳定的稳定方法。

  1. 当页面成分有id属性的时候,
尽量采取id来恒定。
没有的话,再拔取此外定位方法

  2. cssSelector 举行进度快, 推荐应用

  3.
稳定超链接的时候,可以设想linkText或partialLinkText:然则要注意的是

文本平常发生改变, 所以不推荐用

  4. xpath 功力最强悍。 不过实施进程慢,因为急需摸索整个页面成分,
所以尽量少用。
实在没有艺术的时候,才使用xpath

 

一些定位详解,因为其它都相比较简单

1、By.tagName()

  通过tagName来搜索成分的时候,会回来四个成分.
由此必要接纳findElements()

  WebDriver driver = new
FirefoxDriver();

  driver.get(“http://www.cnblogs.com“);

  List<WebElement> buttons =
driver.findElements(By.tagName(“div”));

  System.out.println(“Button:” +
buttons.size());

瞩目: 就算采纳tagName,
要专注很多HTML成分的tagName是同等的,

  比如单选框,复选框,
文本框,密码框.那一个成分标签都以input.
此时单靠tagName不能准确获取我们想要的因素,
还索要组合type属性,才能过滤出我们要的成分

  WebDriver driver = new
FirefoxDriver();

  driver.get(“http://www.cnblogs.com“);

  List<WebElement> buttons =
driver.findElements(By.tagName(“input”));

  for (WebElement webElement : buttons)
{

    if
(webElement.getAttribute(“type”).equals(“text”)) {

      System.out.println(“input
text is :” + webElement.getText());

    }

  }

 

2、Xpath定位

2.1.什么是xpath:xpath 是XML
Path的简称,
由于HTML文档自个儿就是1个正规的XML页面,所以大家可以运用Xpath
的用法来恒定页面成分。

2.2.xpath原则性的缺点 xpath
那种稳定格局,
webdriver会将全体页面的享有因素进行围观以稳住大家所急需的成分,
那是个要命费力的操作, 若是脚本中大量施用xpath做成分定位的话,
脚本的实践进度可能会稍慢

  例如 testXpath.html 代码如下

  <html>

  <head><title>Test
Xpath</title></head>

    <body>

        <div
id=”div1″>

        <input
name=”div1input”></input>

          <a
href=”http://www.sogou.com"&gt;搜狗搜索&lt;/a&gt;

          <img
alt=”div1-img1″ src=”http://www.sogou.comlogo/new/sogou.png
href=”http://www.sogou.com"&gt;搜狗图片&lt;/img&gt;

        <input type=”button”
value=”查询”></input>

        </div>

          <br />

            <div
name=”div2″>

              <input
name=”div2iniput” /></input>

              <a
href=”http://www.baidu.com"&gt;百度搜索&lt;/a&gt;

              <img
alt=”div2-img2″ src=”http://www.baidu.comn/img/bdlogo.png
href=”http:/www.baidu.com”>百度图表</img>

        </div>

      </body>

    </html>

 

  相对路径定位形式

    在被测试网页中,
查找第二个div标签中的按钮

    XPath的表达式:/html/body/div/input[@value=”查询”]

      WebElement button =
driver.findElement(By.xpath(“/html/body/div/input[@value=’查询’]”));

  相对路径的败笔

    1.
若是页面结构暴发变动,改路径也随之失效,必须再度。
所以不推荐使用绝对路径的写法

 

  相对路径和绝对路径的界别

    相对路径 以 “/” 开首, 让xpath
从文档的根节点初阶解析

    绝对路径 以”//” 开首, 让xpath
从文档的其他因素节点开首解析

 

  相对路径定位形式

    在被测试网页中,查找第二个div标签中的按钮

    XPath的表明式://input[@value=”查询”]

      WebElement button =
driver.findElement(By.xpath(“//input[@value=’查询’]”));

三,表格定位  

 
XML 2

举例1:

  driver.navigate().to(“http://www.w3school.com.cn/html/html\_tables.asp“);

    //获取具有的tr集合

    List<WebElement>
rows=driver.findElements(By.className(“dataintable”));

      //验证表格的行数

      // assertEquals(11,
rows.size());

      //打印出具有单元格的数码

    for(WebElement row :
rows){

      //等到当下tr里的td集合

      List<WebElement>
cols=driver.findElements(By.tagName(“td”));

        for(WebElement col :
cols){

          
System.out.println(col.getText()); //得到td里面的公文

        }

        System.out.println();

    }

举例2:

  思路:层级定位,先固定table,在定位tr,在稳住td

  String url=”table的地址”;

  driver.get(url);

  String str=”第2行第3、列”;

  String str1=”第叁行第三列”;

  WebElement Table =
driver.findElement(By.tagName(“table”));

    //java里打印成分类型
Sydtem.out.print(driver.findElement(By.tagName(“table”)).getClass());

    //table有那么多行,定位在哪一行呢?–》专断认同都以首先行

    // 所以就无法用
Table.findElement(By.tagName(“tr”)),findElement是定位单一的三个成分的措施,定位一组用findElements

    //
Table.findElement(By.tagName(“tr”));//那种措施取到的是一个数组,就不是三个对象了,所以以下格局是不利的

  List < WebElement> rows =
Table.findElements(By.tagName(“tr”));

    for( WebElement row :
rows){

      List <WebElement> tds =
row.findElements(By.tagName(“td”));

        for( WebElement td :
tds){

        // System.out.print(td.getText()+”\n”);
//取出富有因素

        String
value=td.getText();

        // if(value==str){ 为啥不可以用=
=,因为value是三个目的

          if(value.equals(str)
|| value.equal(str1)){

    System.out.print(value+”\n”);

      }else{

    System.out.print(“error”+”\n”);

    }

  }

}

 

XML 3

 

相关文章

网站地图xml地图