selenium自动化测试03

Posted Meng XY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium自动化测试03相关的知识,希望对你有一定的参考价值。

小练习--下拉框

创建packa包 autotest03,创建class类AddAddress.java

在自动化测试02里面,我们学习了用xpath来定位下拉框的元素,现在我们用新的方法来定位。用select类来定位

我们可以创建Select类的对象,需要提前定位到下拉框,然后使用对象操作一个下拉框

第一项的id是province,那么我们可以编写代码,定义变量

//下拉框操作
//创建Select类的对象
Select s1 = new Select(driver.findElement(By.id("province")));

然后调用方法

s1.selectByVisibleText("北京市");//option的文本内容

我们可以看到这里面有三个方法,分别是值、索引、文本

在选择的时候,前端代码会进行刷新,所以需要强制等待时间

Thread.sleep(2000);

 第一项我们已经完成了,剩下的两项就好办了

所以代码如下

        //下拉框操作
        //创建Select类的对象
        Select s1 = new Select(driver.findElement(By.id("province")));
        s1.selectByVisibleText("北京市");//option的文本内容
        Thread.sleep(2000);

        Select s2 = new Select(driver.findElement(By.id("city")));
        s2.selectByIndex(1);//这个下拉框中第二个option  索引从零开始 0,1,2,3,4
        Thread.sleep(2000);

        Select s3 = new Select(driver.findElement(By.id("district")));
        s3.selectByValue("110101");//option元素的value属性值定位

代码整合

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;


public class AddAddress 
    public static void main(String[] args) throws InterruptedException 
        WebDriver driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

        LoginPage.loginWithUrl(driver, "test123", "123456");

        driver.findElement(By.linkText("账号设置")).click();
        driver.findElement(By.linkText("修改默认收货地址")).click();
        driver.findElement(By.name("username")).sendKeys("1");

        //下拉框操作
        //创建Select类的对象
        Select s1 = new Select(driver.findElement(By.id("province")));
        s1.selectByVisibleText("北京市");//option的文本内容
        Thread.sleep(2000);

        Select s2 = new Select(driver.findElement(By.id("city")));
        s2.selectByIndex(1);//这个下拉框中第二个option  索引从零开始 0,1,2,3,4
        Thread.sleep(2000);

        Select s3 = new Select(driver.findElement(By.id("district")));
        s3.selectByValue("110101");//option元素的value属性值定位


        driver.findElement(By.name("address")).sendKeys("2");
        driver.findElement(By.name("zip")).sendKeys("3");
        driver.findElement(By.name("mobile")).sendKeys("4");

		driver.findElement(By.className("btn3")).click();


    


运行截图


网页弹窗--警告框

创建class类 AddAddress2.java,把之前AddAddress.java的代码复制,粘贴到2里面。

运行一次,我们可以发现网页会有弹窗,显示一些信息。怎么去判断是不是浏览器弹窗?右键无法检查元素。

这里面,只能处理弹出的浏览器弹窗,其他不行

String result = driver.switchTo().alert().getText();

获取网页中的警告框的文本内容 赋值给变量 result

 driver.switchTo().alert().accept();//确定

driver.switchTo().alert().dismiss();//取消 

driver.switchTo().alert().sendKeys("");//输入 

 浏览器出现了弹窗,我们要获取弹窗里面的内容,然后把他放到变量result里面,用getText();

上面的操作呢弹出了一个窗口,只有“确定” 这一个操作,所以我们要用accept();

在添加这段代码之前,我们要设置强制等待时间

        Thread.sleep(2000);
        //获取网页中的警告框的文本内容,赋值给变量result
        String result = driver.switchTo().alert().getText();
        //关闭弹窗
        driver.switchTo().alert().accept();//确定

然后我们要进行输出,输出result的值,然后判断有没有添加成功,我们先手动测试,添加正确的地址,会输出操作成功的弹窗,所以用“操作成功”和result进行判断

代码整合如下


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

import java.util.concurrent.TimeUnit;

public class AddAddress2 
    public static void main(String[] args) throws InterruptedException 

        WebDriver driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

        LoginPage.loginWithUrl(driver, "test123", "123456");

        driver.findElement(By.linkText("账号设置")).click();
        driver.findElement(By.linkText("修改默认收货地址")).click();
        driver.findElement(By.name("username")).sendKeys("1");

        //下拉框操作
        //创建Select类的对象
        Select s1 = new Select(driver.findElement(By.id("province")));
        s1.selectByVisibleText("北京市");//option的文本内容
        Thread.sleep(2000);

        Select s2 = new Select(driver.findElement(By.id("city")));
        s2.selectByIndex(1);//这个下拉框中第二个option  索引从零开始 0,1,2,3,4
        Thread.sleep(2000);

        Select s3 = new Select(driver.findElement(By.id("district")));
        s3.selectByValue("110101");//option元素的value属性值定位


        driver.findElement(By.name("address")).sendKeys("2");
        driver.findElement(By.name("zip")).sendKeys("3");
        driver.findElement(By.name("mobile")).sendKeys("4");

        driver.findElement(By.className("btn3")).click();
        Thread.sleep(2000);
        //获取网页中的警告框的文本内容,赋值给变量result
        String result = driver.switchTo().alert().getText();
        //关闭弹窗
        driver.switchTo().alert().accept();//确定

        System.out.println(result);
        if (result.equals("操作成功"))
            System.out.println("添加地址成功");
        else 
            System.out.println("添加地址失败");
        
        
    

测试输出结果 


多窗口测试

首先,获得首页网址(http://localhost:8088/),然后我们去手动测试一下,在当前首页,我们点击登录,然后就会发现,网页自动跳转,然后多了一个窗口。

这里面呢,我们必须经过关闭窗口才能进行操作

关闭当前操作的窗口        driver.close(); 

然后使用循环获取,集合中的handle 赋值给s,集合中只有1个数据,循环运行1次

 for (String s : driver.getWindowHandles())
       // s表示新窗口的handle 直接切换
       driver.switchTo().window(s);
   

开始编写代码,创建class类 SwitchWindow.java

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

import java.util.concurrent.TimeUnit;

public class SwitchWindow 
    public static void main(String[] args) 
        WebDriver driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

        driver.get("http://localhost:8088/");
        // 点击登录链接
        driver.findElement(By.linkText("登录")).click();
        // 点击链接弹出了新的标签页(浏览器窗口) 必须经过切换窗口才能操作
        // 关闭当前操作的窗口
        driver.close();
        // 使用循环获取 集合中的handle 赋值给s 集合中只有1个数据,循环运行1次
        for (String s : driver.getWindowHandles())
            // s表示新窗口的handle 直接切换
            driver.switchTo().window(s);
        
        // 输入用户名
        driver.findElement(By.id("username")).sendKeys("test123");
    

测试截图

 


 鼠标的移动悬停

在首页这边,我们把鼠标悬停到某一个按钮上面,然后我们会发现它自动会弹出一个扩展页面,然后供我们去点击,这里面,用findElement就会失效了,所以我们就可以使用Actions类里面的方法。Actions封装了自动化selenium中所有的操作:单击  双击  按住  拖拽  松开  右键   移动...

移动鼠标,模拟鼠标悬停在某个元素上,网页中某些元素默认是隐藏的,必须把鼠标移动到位置才能定位操作

Actions actions = new Action(driver);

actions.moveToElement(元素).perform();//把鼠标移动到这个元素中间

click        单击

doubleClick 双击

开始编码,创建class类MoveMouse.java

在首页,我们来查看一下该元素,是一个链接形式,用LinkText,我们可以嵌套,先findElement(),然后放到moveToElement()里面

actions.moveToElement(driver.findElement(By.linkText("手机、数码、通讯"))).perform();

为了能更直观的感受,我们添加强制等待时间

在手机这边,也是链接形式,用LinkText,但不需要actions了,直接driver 

代码整合

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;

import java.util.concurrent.TimeUnit;

public class MoveMouse 
    public static void main(String[] args) throws InterruptedException 
        WebDriver driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

        driver.get("http://localhost:8088/index.php");
        Thread.sleep(2000);

        Actions actions = new Actions(driver);
        actions.moveToElement(driver.findElement(By.linkText("手机、数码、通讯"))).perform();
        Thread.sleep(2000);
        // 点击手机
        driver.findElement(By.linkText("手机")).click();

    

 测试截图--成功


 网页中大网页套小网页--框架

后台网址(http://localhost:8088/index.php?m=admin&c=index&a=index&pid=1

框架,在一个大网页中嵌入小网页,iframe或frame,根据右键有没有此框架来判断

 

 在这种情况下,我们使用findElement就会找不到元素然后报错,所以我们要切入,切入到框架内部,然后findElement

driver.switchTo().frame(0);//0  数字,切入网页中第一个frame或iframe

driver.switchTo().frame("abc");//切入一个name或id的值是"abc"的frame/iframe元素中

driver.switchTo().frame(定位元素);定位到要切入的frame或iframe元素,直接写入

切入之后再切回去 

driver.switchTo().defaultContent();//回到最上级,默认最大的

driver.switchTo().parentFrame();//返回上一级

 开始操作,我们以后台添加商品为例,进行实操

创建class类 SwitchFrame.java

后台管理账号:admin,密码:password,验证码:1234

前置操作 登录--略过

切入frame,在小网页输入框右键检查,查看是什么框架名,由下图可知iframe id = “mainframe”

driver.switchTo().frame("mainFrame");

最后,代码整合

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

import java.util.concurrent.TimeUnit;

public class SwitchFrame 
    public static void main(String[] args) throws InterruptedException 
        WebDriver driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

        driver.get("http://localhost:8088/index.php?&m=admin&c=public&a=login");

        driver.findElement(By.name("username")).sendKeys("admin");
        driver.findElement(By.name("userpass")).sendKeys("password");
        driver.findElement(By.name("userverify")).sendKeys("1234");
        driver.findElement(By.className("Btn")).click();

        driver.findElement(By.linkText("商品管理")).click();
        driver.findElement(By.linkText("添加商品")).click();
        Thread.sleep(2000);//防止由于页面记载没有操作快, 无法找到frame元素

        //切入frame中操作
        driver.switchTo().frame("mainFrame");

        driver.findElement(By.name("name")).sendKeys("苹果充电宝");

    

 测试截图


个人水平不足,文章中可能有所欠缺,也非常感谢您能看完,GOOD LUCK

以上是关于selenium自动化测试03的主要内容,如果未能解决你的问题,请参考以下文章

web自动化测试入门篇03——selenium使用教程

python-selenium自动化测试网页

python-selenium自动化测试网页

Selenium自动化:代码测试与无代码测试

python+selenium自动化软件测试(第10章):测试驱动TDD

Web自动化测试09:Selenium元素等待