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

8-Selenium----常用操作元素方法1 - 图1

常用操作元素方法

点击:Click()

测试用例:

  1. 1. 打开百度首页
  2. 2. 点击百度首页的“新闻”链接

代码实现:

  1. @Test
  2. public void clickTest() {
  3. // 打开百度首页
  4. driver.get("https://www.baidu.com");
  5. // 定位 新闻 链接文本
  6. WebElement newsLink = driver.findElement(By.xpath(".//*[@id='u1']/a[1]"));
  7. // 点击 新闻 链接
  8. newsLink.click();
  9. }

文本框输入文本:sendkeys(“输入的文本”)

测试用例:

  1. 1. 打开百度页面
  2. 2. 在搜索文本框输入selenium
  3. 3. 点击百度一下按钮

代码实现:

  1. @Test
  2. public void sendKeysTest() {
  3. // 打开百度首页
  4. driver.get("https://www.baidu.com");
  5. // 定位搜索框 并输入 "selenium"
  6. driver.findElement(By.id("kw")).sendKeys("selenium");
  7. // 定位百度一下按钮,并点击
  8. driver.findElement(By.id("su")).click();
  9. }

清空文本框:clear()

测试用例:

  1. 1. 打开百度首页
  2. 2. 在搜索文本框输入selenium
  3. 3. 清空搜索输入框

代码实现:

  1. @Test
  2. public void clearTest() throws InterruptedException {
  3. // 打开百度首页
  4. driver.get("https://www.baidu.com");
  5. // 定位搜索框
  6. WebElement searchTextFiled = driver.findElement(By.id("kw"));
  7. // 输入 "selenium"
  8. searchTextFiled.sendKeys("selenium");
  9. // 为了看到效果,等待3S
  10. Thread.sleep(3000);
  11. // 清空文本框
  12. searchTextFiled.clear();
  13. }

获取文本:getText()

获取标签中间的文本值。

测试用例:

  1. 1. 打开百度首页
  2. 2. 获取右上角所有的文本并输出

代码实现:

  1. @Test
  2. public void getTextTest() {
  3. // 打开百度首页
  4. driver.get("https://www.baidu.com");
  5. // 定位首页右上角文本,多个元素用findElements()
  6. List<WebElement> listText = driver.findElements(By.xpath(".//*[@id='u1']/a"));
  7. for (WebElement element : listText) {
  8. // 获取元素文本
  9. String text = element.getText();
  10. System.out.println(text);
  11. }
  12. }

获取页面title:getTitle()

测试用例:

  1. 1. 打开百度首页
  2. 2. 获取当前页面的title

代码实现:

  1. @Test
  2. public void getTitleTest() {
  3. // 打开百度首页
  4. driver.get("https://www.baidu.com");
  5. // 获取百度首页的title
  6. String tilte = driver.getTitle();
  7. System.out.println(tilte);
  8. }

获取元素属性值:getAttribute(“元素属性名”)

在前端开发中,经常会给一些文本框设置默认值,往往使用的占位符属性(placeholder),那如果我们想要获取这个文本框的默认值时,是无法通过getText()方法获取到,所以我们需要一个方法可以获取元素属性的属性值。

测试用例:

  1. 1. 打开百度页面
  2. 2. 点击登录链接
  3. 3. 获取用户名输入框的默认值并输出

代码实现:

  1. @Test
  2. public void getAttributeTest() throws InterruptedException {
  3. // 打开百度首页
  4. driver.get("https://www.baidu.com");
  5. // 定位 登录 链接,并点击
  6. driver.findElement(By.linkText("登录")).click();
  7. Thread.sleep(3000);
  8. // 定位用户名文本框元素 并获取该元素placeholder的属性值
  9. String placeholderValue = driver.findElement(By.id("TANGRAM__PSP_10__userName")).getAttribute("placeholder");
  10. System.out.println(placeholderValue);
  11. }

提交表单:submit()

submit()方法适用于提交表单,也就是当你的元素在标签中时,我们可以不通过click()来提交表单,而可以直接用submit()来实现。同时click() 你只能对特定元素点击时才会触发提交表单动作,而submit()是可以在表单中的任意元素中使用。

测试用例:

  1. 1. 打开百度页面
  2. 2. 点击登录链接
  3. 3. 直接提交表单

代码实现:

  1. @Test
  2. public void submitTest() throws InterruptedException {
  3. // 打开百度首页
  4. driver.get("https://www.baidu.com");
  5. // 定位 登录 链接,并点击
  6. driver.findElement(By.linkText("登录")).click();
  7. Thread.sleep(3000);
  8. // 定位用户名文本框,不做任何操作,直接提交表单
  9. driver.findElement(By.id("TANGRAM__PSP_10__userName")).submit();
  10. }

综合例子:

百度首页登录例子:

  1. 1. 打开百度首页
  2. 2. 点击登录链接
  3. 3. 输入用户名和密码
  4. 4. 点击登录
  5. 5. 获取登录后的用户名

代码实现:

  1. import org.openqa.selenium.By;
  2. import org.openqa.selenium.WebDriver;
  3. import org.openqa.selenium.WebElement;
  4. import org.openqa.selenium.chrome.ChromeDriver;
  5. import org.testng.annotations.AfterMethod;
  6. import org.testng.annotations.BeforeMethod;
  7. import org.testng.annotations.Test;
  8. /**
  9. * Created by 米阳 on 2017/9/25.
  10. */
  11. public class BaiduLoginTest {
  12. WebDriver driver;
  13. @BeforeMethod
  14. public void openBrowser() {
  15. System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe");
  16. driver = new ChromeDriver();
  17. }
  18. @Test
  19. public void baiduLoginTest() throws InterruptedException {
  20. // 打开百度首页
  21. driver.get("https://www.baidu.com");
  22. // 定位登录按钮,并点击
  23. driver.findElement(By.linkText("登录")).click();
  24. Thread.sleep(2000);
  25. // 定位用户名输入框
  26. WebElement userTextFiled = driver.findElement(By.name("userName"));
  27. // 清空输入框
  28. userTextFiled.clear();
  29. // 输入 XXXXX
  30. userTextFiled.sendKeys("shijin880921");
  31. // 定位密码输入框,并输入XXXXX
  32. driver.findElement(By.name("password")).sendKeys("xxxxxx");
  33. // 点击登录按钮
  34. driver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
  35. Thread.sleep(10000);
  36. // 定位用户名标签,并获取标签文本
  37. String userName = driver.findElement(By.className("user-name")).getText();
  38. System.out.println("获取到的用户名:" + userName);
  39. }
  40. @AfterMethod
  41. public void closedBrowser() {
  42. driver.quit();
  43. }
  44. }

代码中出现了两次的线程等待,这个再实际写脚本是非常不推荐的做法,原因时间写长了会浪费时间,写短了可能下个元素真的没加载,照成脚本执行失败,所以后期我们会针对这个问题讲解决方案。