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的方法中,可以直接调用(当然你也可以自己写) ...
随机推荐
- 几种垂直居中的方式及CSS图片替换技术
由于块级元素的高度是可以设置的,所以对于块级元素的垂直居中比较简单. 方法一: 在不定高的情况下,把元素的上下内边距设为同一个值即可实现,即padding :10px 0; 以上方法针对块级元素和 ...
- java 转换流
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节.它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集. imp ...
- sqlserverdriver配置方法 jdbc连接sqlserver
一.下载驱动程序. 下载地址:http://download.microsoft.com/download/8/B/D/8BDABAE2-B6EA-41D4-B903-7916EF3690EF/sql ...
- mac搭建本地svn
1.终端,创建SVN资源文件库 svnadmin create /Volumes/DATA/SVNTest 2配置权限 上面的语句执行完之后在相应路径下可以找到该文件夹,打开之后 这里主要是修改con ...
- Back to openGL!
#include <iostream> #include <windows.h> #include <gl/glut.h> #include <math.h& ...
- C#中MessageBox用法大全
我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~&quo ...
- strlen 字符型数组和字符数组 sizeof和strlen的区别 cin.get(input,Arsize)
strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值 ...
- Day22_IO第四天
1.合并流(序列流)-) { //不断的在a.txt上读取字节 fos.write(b1); //将读到的字节写到c.txt上 } fis1.close(); //关闭字节输入流 FileInputS ...
- maven打包不执行测试用例
在执行maven打包时不需要执行测试用例,使用如下2种方式实现:-DskipTests=true : 不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下 ...
- idea-生成key的Java代码
import java.math.BigInteger; import java.util.Date; import java.util.Random; import java.util.Scanne ...