上一节我们讲了UI 自动化测试非常重要的一步,查找(定位)元素,那假设我们元素定位准确了,那下一步就到操作元素。
常用操作元素方法
点击:Click()
测试用例:
1. 打开百度首页
2. 点击百度首页的“新闻”链接
代码实现:
@Test
public void clickTest() {
// 打开百度首页
driver.get("https://www.baidu.com");
// 定位 新闻 链接文本
WebElement newsLink = driver.findElement(By.xpath(".//*[@id='u1']/a[1]"));
// 点击 新闻 链接
newsLink.click();
}
文本框输入文本:sendkeys(“输入的文本”)
测试用例:
1. 打开百度页面
2. 在搜索文本框输入selenium
3. 点击百度一下按钮
代码实现:
@Test
public void sendKeysTest() {
// 打开百度首页
driver.get("https://www.baidu.com");
// 定位搜索框 并输入 "selenium"
driver.findElement(By.id("kw")).sendKeys("selenium");
// 定位百度一下按钮,并点击
driver.findElement(By.id("su")).click();
}
清空文本框:clear()
测试用例:
1. 打开百度首页
2. 在搜索文本框输入selenium
3. 清空搜索输入框
代码实现:
@Test
public void clearTest() throws InterruptedException {
// 打开百度首页
driver.get("https://www.baidu.com");
// 定位搜索框
WebElement searchTextFiled = driver.findElement(By.id("kw"));
// 输入 "selenium"
searchTextFiled.sendKeys("selenium");
// 为了看到效果,等待3S
Thread.sleep(3000);
// 清空文本框
searchTextFiled.clear();
}
获取文本:getText()
获取标签中间的文本值。
测试用例:
1. 打开百度首页
2. 获取右上角所有的文本并输出
代码实现:
@Test
public void getTextTest() {
// 打开百度首页
driver.get("https://www.baidu.com");
// 定位首页右上角文本,多个元素用findElements()
List<WebElement> listText = driver.findElements(By.xpath(".//*[@id='u1']/a"));
for (WebElement element : listText) {
// 获取元素文本
String text = element.getText();
System.out.println(text);
}
}
获取页面title:getTitle()
测试用例:
1. 打开百度首页
2. 获取当前页面的title
代码实现:
@Test
public void getTitleTest() {
// 打开百度首页
driver.get("https://www.baidu.com");
// 获取百度首页的title
String tilte = driver.getTitle();
System.out.println(tilte);
}
获取元素属性值:getAttribute(“元素属性名”)
在前端开发中,经常会给一些文本框设置默认值,往往使用的占位符属性(placeholder),那如果我们想要获取这个文本框的默认值时,是无法通过getText()方法获取到,所以我们需要一个方法可以获取元素属性的属性值。
测试用例:
1. 打开百度页面
2. 点击登录链接
3. 获取用户名输入框的默认值并输出
代码实现:
@Test
public void getAttributeTest() throws InterruptedException {
// 打开百度首页
driver.get("https://www.baidu.com");
// 定位 登录 链接,并点击
driver.findElement(By.linkText("登录")).click();
Thread.sleep(3000);
// 定位用户名文本框元素 并获取该元素placeholder的属性值
String placeholderValue = driver.findElement(By.id("TANGRAM__PSP_10__userName")).getAttribute("placeholder");
System.out.println(placeholderValue);
}
提交表单:submit()
submit()方法适用于提交表单,也就是当你的元素在标签中时,我们可以不通过click()来提交表单,而可以直接用submit()来实现。同时click() 你只能对特定元素点击时才会触发提交表单动作,而submit()是可以在表单中的任意元素中使用。
测试用例:
1. 打开百度页面
2. 点击登录链接
3. 直接提交表单
代码实现:
@Test
public void submitTest() throws InterruptedException {
// 打开百度首页
driver.get("https://www.baidu.com");
// 定位 登录 链接,并点击
driver.findElement(By.linkText("登录")).click();
Thread.sleep(3000);
// 定位用户名文本框,不做任何操作,直接提交表单
driver.findElement(By.id("TANGRAM__PSP_10__userName")).submit();
}
综合例子:
百度首页登录例子:
1. 打开百度首页
2. 点击登录链接
3. 输入用户名和密码
4. 点击登录
5. 获取登录后的用户名
代码实现:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* Created by 米阳 on 2017/9/25.
*/
public class BaiduLoginTest {
WebDriver driver;
@BeforeMethod
public void openBrowser() {
System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe");
driver = new ChromeDriver();
}
@Test
public void baiduLoginTest() throws InterruptedException {
// 打开百度首页
driver.get("https://www.baidu.com");
// 定位登录按钮,并点击
driver.findElement(By.linkText("登录")).click();
Thread.sleep(2000);
// 定位用户名输入框
WebElement userTextFiled = driver.findElement(By.name("userName"));
// 清空输入框
userTextFiled.clear();
// 输入 XXXXX
userTextFiled.sendKeys("shijin880921");
// 定位密码输入框,并输入XXXXX
driver.findElement(By.name("password")).sendKeys("xxxxxx");
// 点击登录按钮
driver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
Thread.sleep(10000);
// 定位用户名标签,并获取标签文本
String userName = driver.findElement(By.className("user-name")).getText();
System.out.println("获取到的用户名:" + userName);
}
@AfterMethod
public void closedBrowser() {
driver.quit();
}
}
代码中出现了两次的线程等待,这个再实际写脚本是非常不推荐的做法,原因时间写长了会浪费时间,写短了可能下个元素真的没加载,照成脚本执行失败,所以后期我们会针对这个问题讲解决方案。