WebDriver提供了八种元素定位的方式:
- id
- name
- className
- tagName
- linkText
- partialLinkText
- xpath
- cssSelector
为了更好的学子这8种元素定位的方式,下面我将使用注册页面来练习自动化脚本的设计
- 语言使用Java
- 开发工具使用eclipse Mars.2
- selenium使用2.48.0
- 浏览器使用Firefox35.0
1.id定位
id定位就是通过元素的id属性来定位元素。
id定位页面元素方法如下:
driver.findElement(By.id("id的值"));
案例需求:
- 打开注册A.html页面,使用id定位,自动填写账号A、密码A(账号A:admin、密码A:123456)
- 填写完毕后,3秒钟后关闭浏览器窗口
"注册用户A"页面如下图所示,
"账号A"文本框的HTML示例代码如下,它的id为userA
<input id="userA" type="textA" value="" required="" placeholder="账号A" name="userA"/>
"密码A"文本框的HTML示例代码如下,它的id为passwordA
<input id="passwordA" type="password" value="" placeholder="密码A" name="passwordA"/>
通过id定位元素的Java代码如下:
package com.hxs.day01;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class FindElementById {
public static void main(String[] args) throws InterruptedException {
// 指定Firefox安装路径
System.setProperty("webdriver.firefox.bin", "F:\\Program Files (x86)\\Mozilla Firefox35\\firefox.exe");
// 实例化火狐浏览器
WebDriver driver = new FirefoxDriver();
// 打开注册A.html
String url = "D:\\develop\\软件测试\\web自动化练习\\day02\\注册A.html";
driver.get(url);
// 找到用户文本框-定位元素
WebElement user = driver.findElement(By.id("userA"));
// 给文本框传值
user.sendKeys("admin");
WebElement pwd = driver.findElement(By.id("passwordA"));
pwd.sendKeys("123456");
// 等待3秒,强制等待
Thread.sleep(3000);
// 关闭浏览器
driver.quit();
}
}
2.name定位
name定位就是根据元素的name属性来定位。
name定位页面元素的方法如下:
driver.findElement(By.name("name的值"));
案例需求:
- 打开注册A.html页面,使用name定位,自动填写账号A、密码A(账号A:admin、密码A:123456)
- 填写完毕后,3秒钟后关闭浏览器窗口
"账号A"文本框的HTML示例代码如下,它的name为userA
<input id="userA" type="textA" value="" required="" placeholder="账号A" name="userA"/>
"密码A"文本框的HTML示例代码如下,它的name为passwordA
<input id="passwordA" type="password" value="" placeholder="密码A" name="passwordA"/>
通过name定位元素的Java示例代码如下:
// 打开注册A.html页面
String url = "D:\\develop\\软件测试\\web自动化练习\\day02\\注册A.html";
driver.get(url);
// 定位元素,并给文本框传值
driver.findElement(By.name("userA")).sendKeys("admin");
driver.findElement(By.name("passwordA")).sendKeys("123456");
3.className定位
class属性定位页面元素的方法如下:
driver.findElement(By.className("class属性"));
案例需求:
- 打开注册A.html页面,通过className定位电话号码A,并发送18611111111
"电话号码A"文本框的HTML示例代码如下,它的class属性为telA
<input id="telA" class="telA" type="telA" value="" placeholder="电话A" name="telA"/>
通过class属性定位页面元素的Java示例代码如下:
// 定位元素,并给文本框传值
driver.findElement(By.className("telA")).sendKeys("18611111111 ");
4.tagName定位
tagName定位就是使用标签名进行定位。HTML本质就是由不同的tag(标签)组成,而每个tag都是指同一类,所以tag定位效率低,一般不建议使用。
tagName定位页面元素的方法如下:
driver.findElement(By.tagName("标签名称"));
driver.findElements(By.tagName("标签名称")).get(索引);
案例需求1:
- 打开注册A.html页面,通过tagName定位,自动填写(账号A:admin)
- 填写完毕后,3秒钟后关闭浏览器窗口
"账号A"文本框的HTML示例代码如下,
<input id="userA" type="textA" value="" required="" placeholder="账号A" name="userA"/>
driver.findElement(By.tagName("input")).sendKeys("admin");
案例需求2:
- 打开注册A.html页面,通过tagName定位,获取"电子邮件A"文本框,自动填写allan@qq.com
- 填写完毕后,3秒钟后关闭浏览器窗口
通过tagName定位页面元素的Java示例代码如下:
driver.findElements(By.tagName("input")).get(3).sendKeys("allan@qq.com");;
5.linkText定位
linkText专门用来定位超链接文本(<a>标签</a>),定位链接的全部文字。
linkText定位页面元素的方法如下:
driver.findElement(By.linkText("链接的全部文字"));
案例需求:
- 打开注册A.html页面,使用linkText定位(访问 新浪 网站)超链接
- 3秒钟关闭浏览器窗口
直接通过超链接上的文字信息来定位元素,HTML代码如下,
<a id="fwA" href="http://www.sina.com.cn">访问 新浪 网站</a>
通过linkText定位页面元素的Java示例代码如下:
driver.findElement(By.linkText("访问 新浪 网站")).click();
// 等待3秒,强制等待
Thread.sleep(3000);
// 关闭浏览器
driver.quit();
6.partialLinkText定位
partialLinkText定位链接的部分文字。
partialLinkText定位页面元素的方法如下:
driver.findElement(By.partialLinkText("链接的部分文字"));
案例需求:
- 打开注册A.html页面,使用partialLinkText定位(访问 新浪 网站)超链接
- 3秒钟关闭浏览器窗口
直接通过超链接上的文字信息来定位元素,HTML代码如下,
<a id="fwA" href="http://www.sina.com.cn">访问 新浪 网站</a>
通过partialLinkText定位页面元素的Java示例代码如下:
driver.findElement(By.partialLinkText("访问")).click();
// 等待3秒,强制等待
Thread.sleep(3000);
// 关闭浏览器
driver.quit();