测试自动化_博客已迁移自动化测试Selenium_博客已迁移

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

2017-10-26  本文已影响89人  博客已迁移I米阳

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

image.png

常用操作元素方法

点击: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()方法适用于提交表单,也就是当你的元素在<form>标签中时,我们可以不通过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();
    }
}

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

欢迎关注个人公众号:


个人公众号
上一篇下一篇

猜你喜欢

热点阅读