`
SariyaLee
  • 浏览: 148288 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多
webdriver提供了强大的元素定位方法,支持以下三种方法。
单个对象的定位方法
多个对象的定位方法
层级定位

注意:
selenium-webdriver通过findElement()\findElements()等find方法调用"By"对象来定位和查询元素。By类只是提供查询的方式进行分类。findElement返回一个元素对象否则抛出异常,findElements返回符合条件的元素 List,如果不存在符合条件的就返回一个空的list。
1.定位单个对象
webdriver使用了以下方法定位元素:

       * By.className(className))   
       * By.cssSelector(selector)      
       * By.id(id)                    
       * By.linkText(linkText)         
       * By.name(name)            
       * By.partialLinkText(linkText)
       * By.tagName(name)      
       * By.xpath(xpathExpression)
1)使用className定位元素
定位的html文件:
<form action="/s" name="f">
<span class="s_ipt_wr">
<input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">
</span>
<input type="hidden" value="0" name="rsv_bp"><input type="hidden" value="3" name="rsv_spt">
<span class="s_btn_wr">
<input type="submit" onmouseout="this.className='s_btn'" onmousedown="this.className='s_btn s_btn_h'" class="s_btn" id="su" value="百度一下">
</span>
<div id="sd_1350115810720" style="display: none;"></div>
</form>

package selenium.test.googleSearch;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
public class BaiduFirefoxDriver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
		WebDriver driver = new FirefoxDriver();
		//页面跳转
		driver.get("http://www.baidu.com/");
		//根据className定位百度查询输入框
		WebElement search=driver.findElement(By.className("s_ipt"));
		//输入查询条件classname
		search.sendKeys("classname");
	}

}

2)使用cssSelector定位元素
定位的html文件:
<form action="/s" name="f">
<span class="s_ipt_wr">
<input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">
</span>
<input type="hidden" value="0" name="rsv_bp"><input type="hidden" value="3" name="rsv_spt">
<span class="s_btn_wr">
<input type="submit" onmouseout="this.className='s_btn'" onmousedown="this.className='s_btn s_btn_h'" class="s_btn" id="su" value="百度一下">
</span>
<div id="sd_1350115810720" style="display: none;"></div>
</form>

package selenium.test.googleSearch;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
public class BaiduFirefoxDriver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
		WebDriver driver = new FirefoxDriver();
		//页面跳转
		driver.get("http://www.baidu.com/");
		//根据classSelector定位百度查询输入框
		WebElement search=driver.findElement(By.cssSelector("#kw"));
		//输入查询条件classname
		search.sendKeys("classname");
	}

}

3)使用id定位元素
定位的html文件:
<form action="/s" name="f">
<span class="s_ipt_wr">
<input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">
</span>
<input type="hidden" value="0" name="rsv_bp"><input type="hidden" value="3" name="rsv_spt">
<span class="s_btn_wr">
<input type="submit" onmouseout="this.className='s_btn'" onmousedown="this.className='s_btn s_btn_h'" class="s_btn" id="su" value="百度一下">
</span>
<div id="sd_1350115810720" style="display: none;"></div>
</form>

package selenium.test.googleSearch;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
public class BaiduFirefoxDriver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
		WebDriver driver = new FirefoxDriver();
		//页面跳转
		driver.get("http://www.baidu.com/");
		//根据id定位百度查询输入框
		WebElement search=driver.findElement(By.id("kw"));
		//输入查询条件classname
		search.sendKeys("classname");
	}

}

4)使用name定位元素
定位的html文件:
<form action="/s" name="f">
<span class="s_ipt_wr">
<input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">
</span>
<input type="hidden" value="0" name="rsv_bp"><input type="hidden" value="3" name="rsv_spt">
<span class="s_btn_wr">
<input type="submit" onmouseout="this.className='s_btn'" onmousedown="this.className='s_btn s_btn_h'" class="s_btn" id="su" value="百度一下">
</span>
<div id="sd_1350115810720" style="display: none;"></div>
</form>

package selenium.test.googleSearch;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
public class BaiduFirefoxDriver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
		WebDriver driver = new FirefoxDriver();
		//页面跳转
		driver.get("http://www.baidu.com/");
		//根据name定位百度查询输入框
		WebElement search=driver.findElement(By.name("wd"));
		//输入查询条件classname
		search.sendKeys("classname");
	}

}

5)使用tagname定位元素
定位的html文件:
<form action="/s" name="f">
<span class="s_ipt_wr">
<input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">
</span>
<input type="hidden" value="0" name="rsv_bp"><input type="hidden" value="3" name="rsv_spt">
<span class="s_btn_wr">
<input type="submit" onmouseout="this.className='s_btn'" onmousedown="this.className='s_btn s_btn_h'" class="s_btn" id="su" value="百度一下">
</span>
<div id="sd_1350115810720" style="display: none;"></div>
</form>

package selenium.test.googleSearch;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
public class BaiduFirefoxDriver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
		WebDriver driver = new FirefoxDriver();
		//页面跳转
		driver.get("http://www.baidu.com/");
		//根据tagName定位百度查询输入框
		WebElement search=driver.findElement(By.tagName("input"));
		//输入查询条件classname
		search.sendKeys("classname");
	}

}

6)使用xpath定位元素
定位的html文件:
<form action="/s" name="f">
<span class="s_ipt_wr">
<input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">
</span>
<input type="hidden" value="0" name="rsv_bp"><input type="hidden" value="3" name="rsv_spt">
<span class="s_btn_wr">
<input type="submit" onmouseout="this.className='s_btn'" onmousedown="this.className='s_btn s_btn_h'" class="s_btn" id="su" value="百度一下">
</span>
<div id="sd_1350115810720" style="display: none;"></div>
</form>

package selenium.test.googleSearch;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
public class BaiduFirefoxDriver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
		WebDriver driver = new FirefoxDriver();
		//页面跳转
		driver.get("http://www.baidu.com/");
		//根据xpath定位百度查询输入框
		WebElement search=driver.findElement(By.xpath("//*[@id='kw']"));
		//输入查询条件classname
		search.sendKeys("classname");
	}

}

7)使用linkText定位元素
定位的html文件:
<a href="http://baike.baidu.com" name="tj_baike">百科</a>

package selenium.test.googleSearch;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
public class BaiduFirefoxDriver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
		WebDriver driver = new FirefoxDriver();
		//页面跳转
		driver.get("http://www.baidu.com/");
		//根据linkText定位
		WebElement link=driver.findElement(By.linkText("百科"));
		link.click();
	}

}

8)使用partialLinkText定位元素
定位的html文件:
<a href="http://baike.baidu.com" name="tj_baike">百科</a>

package selenium.test.googleSearch;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
public class BaiduFirefoxDriver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
		WebDriver driver = new FirefoxDriver();
		//页面跳转
		driver.get("http://www.baidu.com/");
		//根据linkText定位
		WebElement link=driver.findElement(By.linkText("科"));
		link.click();
	}

}

2.定位多个对象
package selenium.test.googleSearch;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
public class BaiduFirefoxDriver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
		WebDriver driver = new FirefoxDriver();
		//页面跳转
		driver.get("http://www.baidu.com/");
		//定位百度快捷功能链接,并返回其值
		List<WebElement> links=driver.findElements(By.id("nv"));
		for(WebElement e:links){
			System.out.println(e.getText());
		}
	}

}

其输出结果为:
新 闻 网 页 贴 吧 知 道 MP3 图 片 视 频 地 图

3.层级定位
层级定位的思想是先定位父元素,然后再从父元素中精确定位出其我们需要选取的子元素。
层级定位一般的应用场景是无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。
定位的html文件:
<p id="nv">
<a href="http://news.baidu.com" name="tj_news">新&nbsp;闻</a>
<b>网&nbsp;页</b>
<a href="http://tieba.baidu.com" name="tj_tieba">贴&nbsp;吧</a>
<a href="http://zhidao.baidu.com" name="tj_zhidao">知&nbsp;道</a>
<a href="http://mp3.baidu.com" name="tj_mp3">MP3</a>
<a href="http://image.baidu.com" name="tj_img">图&nbsp;片</a>
<a href="http://video.baidu.com" name="tj_video">视&nbsp;频</a>
<a href="http://map.baidu.com" name="tj_map">地&nbsp;图</a>
</p>

package selenium.test.googleSearch;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
public class BaiduFirefoxDriver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
		WebDriver driver = new FirefoxDriver();
		//页面跳转
		driver.get("http://www.baidu.com/");
		//先定位父元素nv
		WebElement p=driver.findElement(By.id("nv"));
		//再根据父元素定位子元素
		WebElement link=p.findElement(By.name("tj_zhidao"));
		//打印子元素的link值
		System.out.println(link.getText());
		
	}

}

输出结果为:
知 道
分享到:
评论

相关推荐

    Selenium WebDriver中使用By.Xpath快速定位页面元素

    在Selenium WebDriver中使用By.Xpath快速定位页面元素,实现多属性定位一个元素。

    firebug,firefox的插件,定位页面元素。

    firefox的插件,定位页面元素。

    Javascript元素位置、大小、鼠标定位操作

    Javascript 元素位置、大小、鼠标定位操作 本文将详细介绍 Javascript 中元素位置、大小、鼠标定位操作相关的知识点,包括事件对象、DOM 对象、Style 对象等提供的相关属性和方法。 一、事件对象 Event 事件对象 ...

    页面元素xpath定位工具.rar

    页面元素xpath定位工具,快速获取页面的所有可点击,输入的元素,并生成对应xpath

    jQuery实现页面滚动时元素智能定位

    我们在天猫商城下拉滚动条时,“宝贝详情”、“交易详情”等一排按钮会一直出现在浏览器顶部,方便我们切换导航。

    WebDriver元素定位之注册页面.zip

    为了更好地学习WebDriver的八种定位元素的方式,我们使用附件中的注册页面来练习自动化脚本的设计。 博文链接:https://blog.csdn.net/weixin_44679832/article/details/103807698

    selenium之元素定位

    selenium之元素定位,共八种定位方法,以百度搜索框为例子进行讲解

    利用CSS3的定位页面元素

    让我们通过完成一下的实例来了解一下如何在不使用无用的class和id属性的情况下利用CSS3定位页面元素。 相关下载:CSS3.0参考手册下载使用一个唯一的日志(post)ID定位所有日志 wordpress提供给我们一种包含了ID的每篇...

    Python selenium根据class定位页面元素的方法

    在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的。但是实际工作中,很多前端开发人员并未给每个元素都编写id属性。通常一段html代码如下: ...

    selenium+java元素定位与操作及实例

    selenium+java操作UI时,对界面元素进行定位与操作及实例

    WebDriver元素定位案例所需页面.zip

    为了更好地学习WebDriver的八种定位元素的方式,我们使用附件中的注册页面来练习自动化脚本的设计。 博文链接:https://blog.csdn.net/weixin_44679832/article/details/103807698

    css 中的定位详解

    静态定位基本上意味着元素没有定位,只是常规的页面流。 尽管它是默认值,但是有时候需要重新设置应用另一种定位的元素时,还是有必要显式地设置为静态定位。例如,打印机会对具有任何定位的页面无所适从,只有一个...

    selenium+python自动化测试之页面元素定位

    要定位页面元素,需要找到页面的源码,IE浏览器中,打开页面后,在页面上点击鼠标右键,会有“查看源代码”的选项,点击后就会进入页面源码页面,在这里就可以找到页面的所有元素 使用Chrome浏览器打开页面后,在...

    关于页面元素的绝对定位和相对定位的一些理解

    页面元素的绝对定位和相对定位在使用中也是比较频繁的,下面就把个人整理的一些小知识点与大家分享下,希望对大家有所帮助

    自动化测试代码演示之八大元素定位方式(python3.10.5+selenium4.8.0)

    元素的定位是自动化测试核心。要操作一个对象,首先要识别定位或找到这个对象。为了实现网页整体布局,我们先要知道,一...该资源为八大元素定位方式的代码演示实例,具体请参考我的博客文章写的“八大元素定位方式”。

    3.Appium元素定位1

    Appium 提供了多种元素定位方法,包括 id 定位、name 定位、class 定位、层级定位、xpath 定位、H5 页面元素定位、Uiautomator 定位等。 其中,id 定位是最常用的元素定位方法。在日常生活中,相同名字的人可能存在...

Global site tag (gtag.js) - Google Analytics