Selenium->定位页面元素

注意:selenium-webdriver通过findElement() findElements()等find方法调用"By"对象来定位和查询元素。

By类只是提供查询的方式进行分类。

findElement返回一个元素对象否则抛出异常,

findElements返回符合条件的元素List,如果不存在符合条件的就返回一个空的list。

一、定位单个元素

<input id="kw" name="wd" class="s_ipt" value="" maxlength="100" autocomplete="off">

(1)element.findElement(By.className(name));

根据class名定位元素

WebElement element=driver.findElement(By.className("s_ipt"));

System.out.print(element.getTagName());
   

输出结果是:

input

(2)element.findElement(By.id(name));

根据id名定位元素

WebElement element=driver.findElement(By.id("kw"));

System.out.print(element.getTagName());

输出结果:

input

(3)element.findElement(By.name(name));

根据name名定位元素

getAttribute()获取指定属性的值

WebElement element=driver.findElement(By.name("wd"));

System.out.print(element.getAttribute("id"));

输出结果:

kw

(4)element.findElement(By.linkText(name));

(5)element.findElement(By.partialLinkText(name));

(6)element.findElement(By.tagName(name));

(7)element.findElement(By.xpath(name));

(8)element.findElement(By.cssSelector(name));



二、定位多个元素

通过i标签名为input,获取到一个元素列表;

循环这个列表,输出属性为name的值。

public static void main(String[] args) {

    String url = "http://www.51cto.com";

    WebDriver driver = new FirefoxDriver();

    driver.navigate().to(url);

    List<WebElement> elements = driver.findElements(By.tagName("input"));

    for ( WebElement e : elements )
    {
         System.out.print(e.getAttribute("name")+"\n");
    }

    }

输出结果:

checkemail
checkarea
step
username
email
emailexist
usernameexist
yanzhengexsit
userpwd
password2
gzly
gzly_other
sshy
sshy_other
zw
zw_other
code
agree
agree


三、层级定位

层级定位的思想是先定位父元素,然后再从父元素中精确定位出其我们需要选取的子元素。
层级定位一般的应用场景是无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再
遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。

    public static void main(String[] args) {

    String url = "http://ucenter.51cto.com/reg_01.php";

    WebDriver driver = new FirefoxDriver();

    driver.navigate().to(url);

    //通过标签名为form先定位父元素
    WebElement el = driver.findElement(By.tagName("form"));

    //在父元素里定位到子元素
    List<WebElement> elements =el.findElements(By.tagName("input"));

    for ( WebElement e : elements)
    {
         System.out.print(e.getAttribute("name")+"\n");
    }

    }
}
时间: 2024-08-09 15:15:27

Selenium->定位页面元素的相关文章

【selenium学习笔记一】python + selenium定位页面元素的办法。

1.什么是Selenium,为什么web测试,大家都用它? Selenium设计初衷就是为web项目的验收测试再开发.内核使用的是javaScript语言编写,几乎支持所以能运行javaScript的浏览器,支持windows\linux\macos等各种平台. Selenium 脚本是用多种受支持的编程语言中的一种编写的 —— 目前可用的有 Java.Ruby 和 Python 驱动程序.这些脚本在浏览器之外的一个单独的进程中运行.驱动程序的任务是执行测试脚本,并通过与运行在浏览器中的 bro

python + selenium定位页面元素的办法

1.什么是Selenium,为什么web测试,大家都用它? Selenium设计初衷就是为web项目的验收测试再开发.内核使用的是javaScript语言编写,几乎支持所以能运行javaScript的浏览器,支持windows\linux\macos等各种平台. Selenium 脚本是用多种受支持的编程语言中的一种编写的 -- 目前可用的有 Java.Ruby 和 Python 驱动程序.这些脚本在浏览器之外的一个单独的进程中运行.驱动程序的任务是执行测试脚本,并通过与运行在浏览器中的 bro

Python+Selenium 定位页面元素

1.跳转到Frame/Iframe ,再定位元素理解:frame的实质,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此需要先定位到相应的frame,对那个页面里的元素进行定位 1.1方法一如果iframe有name或id的话,直接使用switch_to_frame("name值")或switch_to_frame("id值").如下:driver=webdriver.Firefox()driver.get(r'http://w

selenium IDE(五)selenium 命令之定位页面元素

定位页面元素 对于很多selenium命令,target域是必须的.Target在web页面范围内识别UI元素,它使用locatorType=location的格式.在很多情况下,locatorType可以省略,下面举例方式来描述各种类型的locatorType. 假如,有如下一段HTML代码: html> <body> <form id= "loginForm" > <input name= "username" type= &

请教:日期选择框,selenium如何定位页面元素

请教,下面的html,如何定位页面元素(年.月),试了好多方法都不可以 <div class="inputRow"> <span>购车日期</span> <input id="buyDate" type="hidden" name="buyDate" value="2013-12"> <span id="year__jQSelect0"

定位页面元素之xpath详解以及定位不到测试元素的常见问题

一.定位元素的方法 id:首选的识别属性,W3C标准推荐为页面每一个元素设置一个独一无二的ID属性, 如果没有且很难找到唯一属性,解决方法:(1)找开发把id或者name加上.如果不行,解决思路可以是: 1. 找到该按钮的特征,例如按钮的文字是 submit: 2. 用XPath定位,可以这样写://button[@value='submit'].(注意是单引号!!) name:和id一致 ClassName:对某些具有相同类的元素一网打尽的好方法 link text 和 partial lin

使用CSS选择器定位页面元素

摘录:http://blog.csdn.net/defectfinder/article/details/51734690 CSS选择器也是一个非常好用的定位元素的方法,甚至比Xpath强大.在自动化里我们用CSS选择器来定位页面元素一定要牢记一个准则:唯一定位,通常使用CSS选择器修改样式时会尽量多的选择元素,但是,在自动化里,必须要唯一定位到元素,否则自动化很可能因为找不到页面元素而失败.CSS选择器有很多,像标签选择器.类选择器.ID选择器.关系选择器.伪类选择器.分组选择器等等,但是只需

Python selenium根据class定位页面元素

在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的.但是实际工作中,很多前端开发人员并未给每个元素都编写id属性.通常一段html代码如下: 1 <div class="sui-tips s-isindex-wrap sui-tips-exceedtipnews" style="display: none; width: auto;"><div class="sui-tips-arrow"

Java+selenium之WebDriver定位页面元素(二)

Selenium-Webdriver 提供了强大的元素定位方法,支持以下三种方法: 单个对象的定位方法,多个对象的定位方法和层级定位 1. 定位单个元素 1 // 对于元素的属性包含 id 的情况适用,推荐使用 2 WebElement we = drive.findElement(By.id("id")); 3 // 对于元素的属性包含 name 的情况适用,推荐使用 4 WebElement we = drive.findElement(By.name("name&quo

webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载

原文:https://my.oschina.net/u/2344787/blog/400507?p={{page}} 引言: 在使用webdriver的get方法打开页面时,可能页面需要加载的元素较多导致加载时间很长,而时间过长会导致后面的操作无法进行,甚至直接报错:所以在页面加载到一定时间,实际需要定位的元素很大可能上已经加载出来时,需要停止页面的加载,进而进行下面的操作: 例如:get 汽车之家页面时会等待很长时间,其实页面基本元素都已加载,可进行后续操作 可以通过set_page_load