selenium定位方法(java实例)----持续

Posted 月色深潭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium定位方法(java实例)----持续相关的知识,希望对你有一定的参考价值。

 从下图中可以看到selenium有三类定位元素的方法,一种是直接通过属性、标签以及链接来定位,一种是XPath方式,最后一种是CSS方式。

 

下表列举了元素定位的例子

selenium之页面元素定位方法
   方法  例子
   通过ID来定位  WebElement wElement = driver.findElement(By.id("kw"))
   通过Name来定位  WebElement wElement = driver.findElement(By.name("wd"))
   通过Class定位  WebElement wElement = driver.findElement(By.className("s_ipt"))
   通过Tag来定位  List<WebElement> inputs = driver.findElements(By.tagName("input"))
   通过Link来定位  WebElement wElement = driver.findElement(By.linkText("新闻"))
   通过PartialLink来定位  WebElement wElement = driver.findElement(By.partialLinkText("使用百度"))
XPath定位   1.绝对路径  WebElement wElement = driver.findElement(By.xpath("/html/body/div/div/div/div/div/form/span/input"))
   2.相对路径  WebElement wElement = driver.findElement(By.xpath("//form/span/input"))
   3.利用元素属性定位  WebElement wElement = driver.findElement(By.xpath("//input[@id=\'kw\']"))
   4.利用text()方法定位 WebElement wElement = driver.findElement(By.xpath("//span[text()=\'确定\']"))    span可以使用*替换
   5.利用contains()方法定位

WebElement wElement = driver.findElement(By.xpath("//a[contains(@href,\'basicinfo\')"))

WebElement wElement = driver.findElement(By.xpath("//*[contains(text(),\'退出\')]"))

   6.层级与属性结合  WebElement wElement = driver.findElement(By.xpath("//span[@class=\'bg s_ipt_wr iptfocus quickdelete-wrap\']/input"))
   7.使用逻辑运算符  WebElement wElement = driver.findElement(By.xpath("//input[@class=\'s_ipt\' and @id=\'kw\']"))
 CSS定位  1.通过class属性定位  WebElement wElement = driver.findElement(By.cssSelector(".s_ipt"))
   2.通过id属性定位  WebElement wElement = driver.findElement(By.cssSelector("#kw"))
   3.通过标签名定位  List<WebElement> inputs = driver.findElements(By.cssSelector("input"))
   4.通过父子关系定位  List<WebElement> inputs = driver.findElements(By.cssSelector("span>input"))
   5.通过属性定位  WebElement wElement = driver.findElement(By.cssSelector("[id=kw]"))
   6.通配符  WebElement wElement = driver.findElement(By.cssSelector("[class$=_ipt]"))
   7.组合定位  WebElement wElement = driver.findElement(By.cssSelector("form.fm>span>input.s_ipt"))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注:driver.findElement代表定位到一个元素,driver.findElements代表返回一组元素。

 

 

 

 

 

 

 

 

下面通过实例来说明:

 

 下面是百度首页的部分HTML代码,其中黄底部分就是一个输入框和一个按钮,将使用百度首页来编写测试脚本,并验证脚本。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <body link="#0000cc">
 5 <div id="swfEveryCookieWrap" data-for="result" style="width: 0px; height: 0px; overflow: hidden;">
 6 <script>
 7 <div id="wrapper" style="display: block;">
 8 <script>
 9 <div id="head">
10 <div class="head_wrapper">
11 <div class="s_form">
12 <div class="s_form_wrapper">
13 <div id="lg">
14 <a id="result_logo" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'logo\'})" href="/">
15 <form id="form" class="fm" action="/s" name="f">
16 <input type="hidden" value="utf-8" name="ie">
17 <input type="hidden" value="8" name="f">
18 <input type="hidden" value="1" name="rsv_bp">
19 <input type="hidden" value="1" name="rsv_idx">
20 <input type="hidden" value="" name="ch">
21 <input type="hidden" value="baidu" name="tn">
22 <input type="hidden" value="" name="bar">
23 <span class="bg s_ipt_wr iptfocus quickdelete-wrap">
24 <input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">
25 </span>
26 <span class="bg s_btn_wr">
27 <input id="su" class="bg s_btn" type="submit" value="百度一下">
28 </span>
29 <span class="tools">
30 <input type="hidden" value="" name="rn">
31 <input type="hidden" value="" name="oq">
32 <input type="hidden" value="e142557200096242" name="rsv_pq">
33 <input type="hidden" value="51ebs1YfGfrIuFRBo4wcRYuW9Io+gk3kpwseb9ioGcn4djCUsWDwr56pCKk" name="rsv_t">
34 <input type="hidden" value="cn" name="rqlang">
35 </form>
36 <div id="m"></div>
37 </div>
38 </div>
39 <div id="u">
40 <div id="u1">
41 </div>
42 </div>
43 <div id="s_tab" class="s_tab">
44 <div id="ftCon">
45 <div id="wrapper_wrapper"></div>
46 </div>
47 <div id="c-tips-container" class="c-tips-container"></div>
48 <script>
49 <script>
50 <script>
51 <script src="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/static/protocol/https/jquery/jquery-1.10.2.min_f2fb5194.js" type="text/javascript">
52 <script>
53 <script type="text/javascript">
54 <script>
55 <script>
56 </body>
57 </html>

 下图是利用firefox中的firebug插件查看百度首页信息的截图。

 

 下面编写了18个test,分别对应本页面顶部的表格内容。

  1 package com.test.location;
  2 
  3 import static org.junit.Assert.*;
  4 
  5 import java.util.Iterator;
  6 import java.util.List;
  7 import java.util.concurrent.TimeUnit;
  8 
  9 import javax.lang.model.element.Element;
 10 
 11 import org.junit.After;
 12 import org.junit.Before;
 13 import org.junit.Test;
 14 import org.openqa.selenium.By;
 15 import org.openqa.selenium.WebDriver;
 16 import org.openqa.selenium.WebElement;
 17 import org.openqa.selenium.firefox.FirefoxDriver;
 18 import org.openqa.selenium.interactions.Actions;
 19 
 20 public class TestLocation {
 21     WebDriver driver;
 22 
 23     @Before
 24     public void setUp() throws Exception {
 25 
 26         //获取Driver
 27         driver = new FirefoxDriver();        
 28         driver.get("http://www.baidu.com/");
 29         //将屏幕最大化
 30         driver.manage().window().maximize();
 31         //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
 32     }
 33 
 34     @After
 35     public void tearDown() throws Exception {
 36         //退出浏览器
 37         
 38         driver.quit();
 39     }
 40 ==================================================================================================================
 41     //通过ID来定位
 42     @Test
 43     public void test001_GetByID() {
 44         //清空输入框,并输入查询关键字“selenium”,然后点击查询按钮
 45         driver.findElement(By.id("kw")).clear();    
 46         driver.findElement(By.id("kw")).sendKeys("selenium");
 47         driver.findElement(By.id("su")).click();
 48         
 49         Boolean flag = driver.findElement(By.linkText("Selenium - Web Browser Automation")).isDisplayed();
 50         assertTrue("\\"Selenium - Web Browser Automation\\" is not display",flag);
 51     }
 52 ===================================================================================================================
 53     //通过Name来定位
 54     @Test
 55     public void test002_GetByName(){
 56         //清空输入框,并输入查询关键字“selenium”,然后点击查询按钮
 57         driver.findElement(By.name("wd")).clear();    
 58         driver.findElement(By.name("wd")).sendKeys("selenium");
 59         driver.findElement(By.id("su")).click();
 60         
 61         Boolean flag = driver.findElement(By.linkText("Selenium - Web Browser Automation")).isDisplayed();
 62         assertTrue("\\"Selenium - Web Browser Automation\\" is not display",flag);
 63     }
 64 ====================================================================================================================    
 65     //通过Class定位
 66     @Test
 67     public void test003_GetByClass(){
 68         //清空输入框,并输入查询关键字“selenium”,然后点击查询按钮
 69         driver.findElement(By.className("s_ipt")).clear();    
 70         driver.findElement(By.className("s_ipt")).sendKeys("selenium");
 71         driver.findElement(By.id("su")).click();
 72         
 73         
 74         Boolean flag = driver.findElement(By.linkText("Selenium - Web Browser Automation")).isDisplayed();
 75         assertTrue("\\"Selenium - Web Br

以上是关于selenium定位方法(java实例)----持续的主要内容,如果未能解决你的问题,请参考以下文章

java selenium 元素定位大全

Java+selenium之WebDriver定位页面元素

selenium元素定位(Java)

selenium 2定位方式实例

Selenium+Python定位实例

Python+Selenium元素定位不到的问题及解决办法