Selenium 元素定位
selenium通过driver.findElement(By selector)来定位元素,selector在selenium-java.jar中,里面的方法一共就8种,如下图:

基本定义:
By.id
WebElement element = driver.findElement(By.id("passwd-id")); By.name
WebElement element = driver.findElement(By.name("passwd")); By. path
WebElement element = driver.findElement(By.xpath("//input[@id='passwd-id']")); By.className
WebElement element = driver.findElement(By.className("input_class")); By.cssSelector
WebElement element = driver.findElement(By.cssSelector(".input_class")); By.linkText
//通俗点就是精确查询
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
WebElement element = driver.findElement(By.linkText("百科")); By.partialLinkText
//这个方法就是模糊查询
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
WebElement element = driver.findElement(By.partialLinkText("hao"));
frame定位
1.iFrame有ID 或者 name的情况
//进入id="frame1"的frame中,定位id="div1"的div和id="input1"的输入框。
dr.switchTo().frame("frame1");
dr.findElement(By.id("div1"));
dr.findElement(By.id("input1")) 2.如果一个iFrame既没有id,也没有name,通用情况
// 定位frame位置,并选取frame
WebElement frame=driver.findElement(By.xpath( "/html/body/div[2]/div[8]/div[2]/div[3]/div/div[2]/div/iframe" ));
driver.switchTo().frame(frame); 3.跳出iFrame
//跳出frame,进入default content;重新定位id="id1"的div
dr.switchTo().defaultContent();
dr.findElement(By.id("id1"))
下面提供了一些常见的方法:获取元素、判断元素是否存在、点击button、填写文本、等待事件
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Select; /**
* @auth Nancy
* @data 2016-11-23上午11:46:14
* @description 页面元素工具
*/
public class UIUtils { public static int waitTimes = 5; //***************************getBy**************************** /**
* 判断页面元素是否存在
* @param driver
* @param selector
* @return
*/
public static boolean isElementExsit(WebDriver driver, By selector) {
try {
driver.findElement(selector);
return true;
} catch (NoSuchElementException e) {
return false;
}
} /**
* 判断元素是否存在 通过ID
* @param driver
* @param id
* @return
*/
public static boolean isElementExsitById(WebDriver driver,String id) {
try {
driver.findElement(By.id(id));
return true;
} catch (NoSuchElementException e) {
return false;
}
} /**
* 查找元素 通过By
* @param driver
* @param selector
* @return
*/
public static WebElement getElement(WebDriver driver, By selector){
try {
WebElement element = driver.findElement(selector);
return element;
} catch (NoSuchElementException e) {
return null;
}
} /**
* 查找元素 通过tagName
* @param driver
* @param selector
* @return
*/
public static WebElement getElementTagName(WebDriver driver, String name){
try {
WebElement element = driver.findElement(By.tagName(name));
return element;
} catch (NoSuchElementException e) {
return null;
}
} /**
* 查找元素 通过Id
* @param driver
* @param id
* @return
*/
public static WebElement getElementById(WebDriver driver, String id){
try {
WebElement element = driver.findElement(By.id(id));
return element;
} catch (NoSuchElementException e) {
new NoSuchElementException("找不到元素");
return null;
}
}
/**
* 查找元素 通过xpath
* @param driver
* @param id
* @return
*/
public static WebElement getElementByXpath(WebDriver driver, String xpath){
try {
WebElement element = driver.findElement(By.xpath(xpath));
return element;
} catch (NoSuchElementException e) {
new NoSuchElementException("找不到元素");
return null;
}
} /**
* 查找元素 通过name
* @param driver
* @param name
* @return
*/
public static WebElement getElementByName(WebDriver driver, String name){
try {
WebElement element = driver.findElement(By.name(name));
if(element!=null){
return element;
}else{
new NoSuchElementException("找不到元素");
return null;
}
} catch (NoSuchElementException e) {
new NoSuchElementException("找不到元素");
return null;
}
} /**
* 查找元素 通过超链接
* @param driver
* @param text
* @return
*/
public static WebElement getElementByLinkText(WebDriver driver, String text){
try {
WebElement element = driver.findElement(By.linkText(text));
return element;
} catch (NoSuchElementException e) {
new NoSuchElementException(text+"元素找不到!");
return null;
}
} /**
* 查找元素 通过className
* @param driver
* @param text
* @return
*/
public static WebElement getElementByClassName(WebDriver driver, String className){
try {
WebElement element = driver.findElement(By.className(className));
return element;
} catch (NoSuchElementException e) {
new NoSuchElementException(className+"元素找不到!");
return null;
}
} //***************************点击button****************************
/**
* 点击 button 超链接
* @param driver
* @param text
*/
public static void clickByLinkText(WebDriver driver, String text){
WebElement element = getElementByLinkText(driver,text);
element.click();
wait(waitTimes);
} /**
* 点击 button 通过Id
* @param driver
* @param id
*/
public static void clickById(WebDriver driver,String id){
WebElement element = getElementById(driver, id);
element.click();
wait(waitTimes);
}
/**
* 点击 button 通过Id
* @param driver
* @param id
*/
public static void clickByXpath(WebDriver driver,String xpath){
WebElement element = getElementByXpath(driver, xpath);
element.click();
wait(waitTimes);
} /**
* 点击 button 通过name
* @param driver
* @param name
*/
public static void clickByName(WebDriver driver,String name){
WebElement element = getElementByName(driver, name);
element.click();
wait(waitTimes);
} /**
* 点击 button 通过classname
* @param driver
* @param className
*/
public static void clickByClassName(WebDriver driver,String className){
WebElement element =getElementByClassName(driver, className);
element.click();
wait(waitTimes);
} //***************************选择下拉框select****************************
public static Select selectBy(WebDriver driver,By by){
Select userSelect= new Select(getElement(driver, by));
return userSelect;
} /**
* 获取明文为value的值
* @param driver
* @param by
* @param value
*/
public static void selectVisualTextBy(WebDriver driver,By by,String visibleText){
Select userSelect= new Select(getElement(driver, by));
userSelect.selectByVisibleText(visibleText);
} public static void selectVisualTextByName(WebDriver driver,String name,String visibleText){
selectVisualTextBy(driver, By.name(name), visibleText);
} //***************************赋值input****************************
/**
* 通过id找到元素,赋值
* @param driver
* @param id id
* @param text 需要输入的文字
*/
public static void sendKeysById(WebDriver driver, String id,String text){
WebElement element = getElementById(driver,id);
element.sendKeys(text);
} //***************************等待****************************
/**
* 等待
* @param seconds
*/
public static void waitMoment(){
wait(waitTimes);
}
/**
* 等待
* @param seconds
*/
public static void wait(int seconds){
try {
Thread.sleep(seconds * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} /**
* 等待元素最多三十秒
* @param driver
* @param id
* @return
*/
public static boolean waitElementById(WebDriver driver,String id){
boolean flag = false;
int i = 1;
while(!flag&i<=6){
wait(waitTimes);
flag = isElementExsitById(driver,id);
i++;
}
return flag;
} /**
* 通过超链接等待元素
* @param driver
* @param text
* @return
*/
public static boolean waitElementByLinkText(WebDriver driver,String text){
boolean flag = false;
int i = 1;
while(!flag&i<=6){
wait(waitTimes);
flag = isElementExsit(driver,By.linkText(text));
i++;
}
return flag;
}
Selenium 元素定位的更多相关文章
- 自动化测试基础篇--Selenium元素定位
摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...
- Selenium3 + Python3自动化测试系列二——selenium元素定位
一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...
- selenium元素定位之css选择器
在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...
- selenium元素定位陷阱规避
为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...
- selenium元素定位篇
Selenium webdriver是完全模拟用户在对浏览器进行操作,所有用户都是在页面进行的单击.双击.输入.滚动等操作,而webdriver也是一样,所以需要我们指定元素让webdriver进行单 ...
- python学习之——selenium元素定位
web自动化测试按步骤拆分,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告. 其中定位元素尤为关键,此篇是使用webdriver通过页面各个 ...
- python selenium 元素定位(三)
上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到 ...
- selenium元素定位大全
要做自动化,首先要了解页面结构,要了解页面结构,就要了解页面元素的定位方法 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合B ...
- selenium元素定位不到之iframe
我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe 问题描述:通过firebug查询到相应元素的id或name等, ...
- selenium元素定位
在网页自动化测试中,我们要让程序自动模拟我们的点击.输入.悬浮.拖动等操作,完成我们的测试用例组. 输入.点击.打开这样的动词,已经包含在了selenium的方法中,可以直接调用(当然你也可以自己写) ...
随机推荐
- 第六章 第一个Linux驱动程序:统计单词个数
现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...
- yii开发一个web程序的基本流程
1. 创建目录结构.在前面的章节Creating First Yii Application写的yiic工具可以帮助我们快速完成这步. 2. 配置 application.就是修改applicatio ...
- grep查询文本:问一个简单shell问题,将grep的输出赋值给一个变量
问一个简单shell问题,将grep的输出赋值给一个变量 用grep命令得到的输出赋值给一个变量不成功. grep命令如下: 代码: $ grep -c '^abc' file.txt 输出为22,表 ...
- 关于 jsp 解析特殊字符的问题
在项目中了 使用了一个UI封装好 的插件 经测试了可以返回一些特殊字符,但是因为是特殊字符,导致了jsp解析出错,使用了Jquery来添加了dom结构,添加完之后,Ui控件进行初始化的时候报错了,原因 ...
- 11、Linq的使用
一.种类 1.Linq to Objects,实现了IEnumerable<T>集合对象的集成查询 2.Linq to sql,针对关系数据库MSSQL的解释查询 3.Linq to En ...
- 作业八:团队项目——Alpha阶段项目总结
1.项目的预期目标 最初的项目计划实现一款类似微信飞机大战这样的一款模拟飞行游戏,中途也没有变动. 2.目前项目实现的功能. 击落飞机并计分. 3.下阶段我们可以增加游戏更多的功能,以及增加网络在线对 ...
- android 返回键 操作
cocos2dx项目移植到android平台上对于 android手机返回键,主菜单键等键的相关操作,本篇详细对返回键做个简单的介绍说明, 不足不对之处,请同猿们指出. 首先在主activity下,即 ...
- WIN32服务程序(三):完整的服务程序实例
前面我们所讲的“服务程序”,更准确地说是服务控制程序,例如我们通过输入应用的路径,将一个应用程序添加到服务控制管理器.一个服务控制程序可以将一个程序添加到服务控制管理器中,并控制它的运行.停止和删除等 ...
- MySQL, 创建一个只读用户和一个所有权限用户
安装pasa需要配置mysql.基本知识学习一下 http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html MySQL 为关系型数据库 ...
- Hibernate 随记(数据库映射流程)
ORM:Object/Relationship Mapping 对象/关系映射 实现流程: 1.项目中导入Hibernate相关类包并创建配置文件.Hibernate.cfg.xml(可 ...