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的方法中,可以直接调用(当然你也可以自己写) ...
随机推荐
- 安全协议系列(四)----SSL与TLS
当今社会,电子商务大行其道,作为网络安全 infrastructure 之一的 -- SSL/TLS 协议的重要性已不用多说.OpenSSL 则是基于该协议的目前应用最广泛的开源实现,其影响之大,以至 ...
- CCF 201612-2 工资计算 java 解题
问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资.假设他一个月的税前工资(扣除五险一金后.未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算: 1) 个人所得 ...
- mybatis学习2
解决字段名与实体类属性名不相同的冲突 1. 准备表和数据:CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,order_no VA ...
- 【Learning Python】【第二章】Python基础类型和基础操作
基础类型: 整型: py 3.0解决了整数溢出的问题,意味着整型不必考虑32位,64位,有无符号等问题,你写一个1亿亿亿,就是1亿亿亿,不会溢出 a = 10 ** 240 print(a) 执行以上 ...
- _crol_和_cror_函数
“_crol_” 与“_cror_”其实就是左右循环代码,其具有程序代码简单执行效率高的优点! 是在单片机c语言编程中常用到的,变量=_crol_(变量名,移动位数),例如:P0=_crol_(P0, ...
- Oracle监听小问题
啥情况 宁波_弈风 15:17:40 宁波_弈风 15:17:49 默认配置路径 宁波_弈风 15:18:09 宁波_弈风 15:19:13 我原来一直都在SAMPLE文件里面配置和保存,因为 ...
- Windows平台下PHP环境搭建
在Windows平台上搭建PHP的开发环境可以下载WAMP(Windows.Apache.MySQL.PHP的首字母缩写)集成化安装包.这样就不需要单独安装Apache.MySQL和PHP了. 这款软 ...
- flv转mp4选项设置
使用格式工厂将flv转换为mp4视频后,播放视频正常,但使用web播放器播放时就只有声音没有影像,其实只有设置好视频编码就不会出现这种情况了:
- sql语句变量定义和样例
变量和与常量 1.定义和使用局部变量说明:局部变量是用户可自定义的变量,它的作用范围仅在程序内部.局部变量的名称是用户自定义的,命名的局部变量名要符合SQL Server 2000标识符命名规则,必须 ...
- Android 媒体存储服务(一)
Android 媒体存储服务 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 ...