上一节我们讲了UI 自动化测试非常重要的一步,查找(定位)元素,那假设我们元素定位准确了,那下一步就到操作元素。

常用操作元素方法
点击:Click()
测试用例:
1. 打开百度首页2. 点击百度首页的“新闻”链接
代码实现:
@Testpublic void clickTest() {// 打开百度首页driver.get("https://www.baidu.com");// 定位 新闻 链接文本WebElement newsLink = driver.findElement(By.xpath(".//*[@id='u1']/a[1]"));// 点击 新闻 链接newsLink.click();}
文本框输入文本:sendkeys(“输入的文本”)
测试用例:
1. 打开百度页面2. 在搜索文本框输入selenium3. 点击百度一下按钮
代码实现:
@Testpublic 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. 在搜索文本框输入selenium3. 清空搜索输入框
代码实现:
@Testpublic void clearTest() throws InterruptedException {// 打开百度首页driver.get("https://www.baidu.com");// 定位搜索框WebElement searchTextFiled = driver.findElement(By.id("kw"));// 输入 "selenium"searchTextFiled.sendKeys("selenium");// 为了看到效果,等待3SThread.sleep(3000);// 清空文本框searchTextFiled.clear();}
获取文本:getText()
获取标签中间的文本值。
测试用例:
1. 打开百度首页2. 获取右上角所有的文本并输出
代码实现:
@Testpublic 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
代码实现:
@Testpublic void getTitleTest() {// 打开百度首页driver.get("https://www.baidu.com");// 获取百度首页的titleString tilte = driver.getTitle();System.out.println(tilte);}
获取元素属性值:getAttribute(“元素属性名”)
在前端开发中,经常会给一些文本框设置默认值,往往使用的占位符属性(placeholder),那如果我们想要获取这个文本框的默认值时,是无法通过getText()方法获取到,所以我们需要一个方法可以获取元素属性的属性值。
测试用例:
1. 打开百度页面2. 点击登录链接3. 获取用户名输入框的默认值并输出
代码实现:
@Testpublic 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. 直接提交表单
代码实现:
@Testpublic 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;@BeforeMethodpublic void openBrowser() {System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe");driver = new ChromeDriver();}@Testpublic 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();// 输入 XXXXXuserTextFiled.sendKeys("shijin880921");// 定位密码输入框,并输入XXXXXdriver.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);}@AfterMethodpublic void closedBrowser() {driver.quit();}}
代码中出现了两次的线程等待,这个再实际写脚本是非常不推荐的做法,原因时间写长了会浪费时间,写短了可能下个元素真的没加载,照成脚本执行失败,所以后期我们会针对这个问题讲解决方案。
