查找页面元素一

 

Selenium Webdriver元素定位的八种方式:

id,  name,  class name,  tag name,

 

link text,  partial link text,  xpath,  css selector

 

在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素。其中By类的常用定位方式如下,现分别介绍如下。

 

1、通过ID查找元素(网上转载)By.id()

使用页面元素的id属性,id在大多数情况下是唯一的。

通过页面元素的ID查找元素是最为推荐的方式。W3C标准推荐开发人员为每一个页面元素都提供一个独一无二的ID属性,因此开发人员应该避免在单个页面上的所有元素存在ID不唯一的情况和元素ID是自动生成 的情况。一旦页面元素被赋予了唯一的ID属性,它就能够很容易滴被浏览器调试工具或者测试工具识别并找到。在浏览器解析DOM(Document Object Model,文档对象模型)时,页面元素的ID被作为首选的识别属性,因为这是最快的识别策略。

实例如下:

2、通过name查找元素(网上转载)By.name()

  使用页面元素的name属性,name在当前页面不一定唯一。

3、通过ClassName查找元素(网上转载)By.className()

className属性是利用元素的css样式表所引用的伪类名称来进行元素查找的方法。对于任何HTML页面的元素来说,一般程序员或页面设计师会给元素直接赋予一个样式属性或者利用css文件里的伪类来定义元素样式,使元素在页面上显示时能够更加美观。一般css样式表可能会长成下面这个样子:

 

1 .buttonStyle{
 2 
 3     width: 50px;
 4 
 5     height: 50px;
 6 
 7     border-radius: 50%;
 8 
 9     margin: 0% 2%;
10 
11 }

 

定义好后,就可以再页面元素中引用

1 <button name="sampleBtnName" id="sampleBtnId" class="buttonStyle">I'm Button</button>

 

实例如下:

4、通过TagName查找元素(网上转载)By.tagName()

使用页面元素的HTML的标签名属性

 

---------------------------------------------------------------------------------------------------------------------------------------------------

另外,在使用tagName方法进行定位时,还有一个地方需要注意的是,通常有些HTML元素的tagName是相同的,如下图(1)所示。

 

从图中我们可以看到,单选框、复选框、文本框和密码框的元素标签都是input,此时单靠tagName无法准确地得到我们想要的元素,需要结合type属性才能过滤出我们要的元素。示例代码如下:

 

1 public class SearchElementsByTagName{
 2 
 3         public static void main(String[] args){
 4 
 5             WebDriver driver = new FirefoxDriver();
 6 
 7             driver.get("http://www.forexample.com");
 8 
 9             List<WebElement> allInputs = driver.findElements(By.tagName("input"));
10 
11             //只打印所有文本框的值
12 
13             for(WebElement e: allInputs){
14 
15                   if (e.getAttribute(“type”).equals(“text”)){
16 
17                   System.out.println(e.getText().toString());  //打印出每个文本框里的值
18 
19                   }
20 
21             }
22 
23        }
24 
25 }

========================================================================================================

个人整理:

a、通过tagName获得元素时,不需要根据标签一层一层的获取,具体例子如下:获取超链接<a>这个元素对象

HTml代码:

java代码:(仅仅有一个tagName的标签时)

java代码:(有多个tagName的标签时)

例子1

 /**
         * 进入添加机构界面
         */
       WebElement fu=driver.findElement(By.linkText("机构管理"));//获取父类元素
       fu.click();;
      WebElement zi=driver.findElement(By.id("agency-menu")).findElements(By.tagName("a")).get(0);//获取子类元素
      zi.click();

例子2:

HTML界面:

java代码:

String actual=fFind(dr, By.className("messager-body panel-body panel-body-noborder window-body")).findElements(By.tagName("div")).get(1).getText();

-----------------------------------------------------------------------------------------------------------------------------------------------------

 

posted on 2015-11-05 11:54  小果子  阅读(392)  评论(0编辑  收藏  举报