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 元素定位的更多相关文章

  1. 自动化测试基础篇--Selenium元素定位

    摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...

  2. Selenium3 + Python3自动化测试系列二——selenium元素定位

    一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...

  3. selenium元素定位之css选择器

    在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...

  4. selenium元素定位陷阱规避

    为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...

  5. selenium元素定位篇

    Selenium webdriver是完全模拟用户在对浏览器进行操作,所有用户都是在页面进行的单击.双击.输入.滚动等操作,而webdriver也是一样,所以需要我们指定元素让webdriver进行单 ...

  6. python学习之——selenium元素定位

    web自动化测试按步骤拆分,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告. 其中定位元素尤为关键,此篇是使用webdriver通过页面各个 ...

  7. python selenium 元素定位(三)

    上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到 ...

  8. selenium元素定位大全

    要做自动化,首先要了解页面结构,要了解页面结构,就要了解页面元素的定位方法 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合B ...

  9. selenium元素定位不到之iframe

    我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe 问题描述:通过firebug查询到相应元素的id或name等, ...

  10. selenium元素定位

    在网页自动化测试中,我们要让程序自动模拟我们的点击.输入.悬浮.拖动等操作,完成我们的测试用例组. 输入.点击.打开这样的动词,已经包含在了selenium的方法中,可以直接调用(当然你也可以自己写) ...

随机推荐

  1. android SDK 离线下载更新

    http://blog.csdn.net/harvic880925/article/details/37913801 前言:在公司配置eclipse做android开发,真是烦死了,不知公司做了哪门子 ...

  2. Metronic学习之路

    简介 1.Metronic 是一个基于 Bootstrap 3.* 设计的自适应.多用途的管理后台模板. 2.HTML页面开头都有着下面一段代码来检测 ie 浏览器的版本,并根据不同版本应用特定的类到 ...

  3. UE4 Android打包 问题 记录笔记

    问题一:error: expression result unused [-Werror,-Wunused-value] 虽然看了输出日志知道了这行沉余代码删掉就行,但是不是很懂这个地方报错意义. 问 ...

  4. UE4 创建进程,打开额外程序 方法 笔记

    FPlatformProcess::CreateProc(TEXT("程序路径");

  5. 关于javascript自定义对象(来自网络)(最近几天不会的)

    javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 funct ...

  6. C++ 类继承的对象布局

    C++多重继承下,对象布局与编译器,是否为虚拟继承都有很大关系,下面将逐一分析其中的差别,相同点为都按照类继承的先后顺序布局(类内按照虚表.成员声明先后顺序排列).该类情况为子类按照继承顺序排列,如c ...

  7. SQL --Chapter02 查询基础

    SELECT 语句基础 SELECT <列名>,….. FROM <表名>; 查询全部列: SELECT * FROM <表名>; 使用AS关键字为列设置别名,设定 ...

  8. mac下获取应用签名

    查看md5和SHA1: universalbroker.jks为签名文件 keytool -list -v -keystore universalbroker.jks 微信分享和登录平台需要去掉冒号的 ...

  9. Python 文件操作函数

    这个博客是 Building powerful image classification models using very little data 的前期准备,用于把图片数据按照教程指示放到规定的文 ...

  10. java的覆盖重写隐藏和C#中的不同

    先看下C#中的: C#中覆盖 隐藏 重写这三种有不同的意义,而Java中不同. 1. java中没有new ,使用new会报错,编译不通过. 2. java中重写和覆盖应该是一个意思 static c ...