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的方法中,可以直接调用(当然你也可以自己写) ...
随机推荐
- .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】
1.首先在前台dataGridview属性中增加onRowDataBound属性事件 2.然后在后台Observing_RowDataBound事件中增加代码 protected void Obser ...
- a primary example for Functional programming in javascript
background In pursuit of a real-world application, let’s say we need an e-commerce web applicationfo ...
- GCHandler的使用
众所周知,我们在使用c#托管代码时,内存地址和GC回收那不是我们关心的,CLR已经给我们暗箱操作. 但是如果我们在c#中调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个 ...
- hdu 2066
ps:我天...之前看了迪杰斯特拉..现在这题要用到floyd..就是先建一个图,然后从列开始遍历,每列里遍历行,行又对应每列... 从A列开始遍历每行,比如遍历到B,这时候B->A知道是2,接 ...
- 样式PC和手机页面
/*媒体查询--当页面大于1200px时*/ @media (min-width: 1200px) { } /*在922和1199像素之间的屏幕里,中等屏幕*/ @media (min-width: ...
- [转]使用Scrapy建立一个网站抓取器
英文原文:Build a Website Crawler based upon Scrapy 标签: Scrapy Python 209人收藏此文章, 我要收藏renwofei423 推荐于 11个月 ...
- 【Learning Python】【第三章】表、元组、字典和集合
表 表提供了类似数组的数据结构,它是可变的,可以增删改查 增: insert(下标,值),如果下标 > 表的长度,则插入到末尾:若 < 表头的下标,则插入到第一个 append / += ...
- Spring的Bean的基本概念
Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.Spring容器能够生产哪些产品,取决于配置文件的配置. 对于我们而言,使用Spring框架做两件事:开发Bean. ...
- C++利用IO流对浮点数进行格式化控制输出
浮点数输出 (100/100 分数) 题目描述 编写一个程序,输入一个浮点数和输出格式要求,按照格式要求将该浮点数输出.给定非负整数m和n,表示输出的浮点数小数点前的宽度为m,若宽度不够则在前面补0, ...
- 我是一只IT小小鸟----读书笔记
人生如同打牌,能抓到一手好牌固然是运气好,但重要的是,你不能靠运气生活,而要琢磨怎样把手上这把看上去“不怎么样的”牌打好. 要了解一种主流的软件开发与运行平台,熟练掌握一种开发工具,这样就具备了进行开 ...