小白第一次写测试文章,求大佬轻锤!!!

先贴代码



import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.concurrent.TimeUnit;


public class Itest {
    public static void main(String[] args) throws Exception {

        System.setProperty("webdriver.chrome.driver", "C://driver/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        //driver.manage().window().maximize();
        driver.get("http://127.0.0.1:15672");

        String payloadMessageText=null;
        //设置页面等待时间5s
        driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);

        //定位对象等待时间10s,异常则报错
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        WebElement username = driver.findElement(By.xpath("//*[@id=\"login\"]/form/table/tbody/tr[1]/td/input"));
        WebElement password  = driver.findElement(By.xpath("//*[@id=\"login\"]/form/table/tbody/tr[2]/td/input"));

        username.sendKeys("admin");
        password.sendKeys("QAZ!@#isdb");

        WebElement loginButton = driver.findElement(By.xpath("//*[@id=\"login\"]/form/table/tbody/tr[3]/td/input"));
        loginButton.click();


        //登录成功
        WebElement queueButton = driver.findElement(By.xpath("//*[@id=\"tabs\"]/li[5]/a"));
        queueButton.click();
        driver.get("http://127.0.0.1:15672/#/queues/%2F/risk-topic.risk-group");
        //定位对象等待时间10s,异常则报错
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        WebElement publishMessageButton = driver.findElement(By.xpath("//*[text()='Publish message']"));
        publishMessageButton.click();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        File file = new File("D:\\test.txt");//定义一个file对象,用来初始化FileReader
        FileReader reader = new FileReader(file);//定义一个fileReader对象,用来初始化BufferedReader
        BufferedReader bReader = new BufferedReader(reader);//new一个BufferedReader对象,将文件内容读取到缓存
        StringBuilder sb = new StringBuilder();//定义一个字符串缓存,将字符串存放缓存中
        String s = "";
        while ((s =bReader.readLine()) != null) {//逐行读取文件内容,不读取换行符和末尾的空格
            WebElement payloadMessage = driver.findElement(By.xpath("//*[@id=\"main\"]/div[4]/div/form/table/tbody/tr[5]/td/textarea"));
            WebElement payloadSendButton = driver.findElement(By.xpath("//*[@id=\"main\"]/div[4]/div/form/input[4]"));
            sb.append(s + "\n");//将读取的字符串添加换行符后累加存放在缓存中
            System.out.println(s);
            payloadMessage.sendKeys(s);
            Thread.sleep(10000);
            payloadSendButton.click();
            Thread.sleep(5000);
            WebElement closeButton = driver.findElement(By.xpath("/html/body/div[2]/span"));
            closeButton.click();
            Thread.sleep(3000);
            payloadMessage.clear();
            Thread.sleep(2000);
        }
        bReader.close();
        String str = sb.toString();
        System.out.println("运行完毕" );


        String title = driver.getTitle();
        System.out.printf(title);

        //driver.close();
    }
}

步骤解析
一.idea 新建 maven 工程,引入 selenium 的 jar 包,pom.xml 如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hongtao</groupId>
    <artifactId>seleniumRabbitmq</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>

        <!-- selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.4.0</version>
        </dependency>

    </dependencies>

</project>

二.引入谷歌浏览器的驱动,网址为https://chromedriver.chromium.org/downloads,我的浏览器是 ChromeDriver 77.0.3865.40,所以选择:

三.我这边用的定位元素的方法主要是 xpath,

WebElement username = driver.findElement(By.xpath("//*[@id=\"login\"]/form/table/tbody/tr[1]/td/input"));
WebElement password  = driver.findElement(By.xpath("//*[@id=\"login\"]/form/table/tbody/tr[2]/td/input"));

简单的 rabbitmq 元素都好找,遇到些许阻碍的地方在于,定位 rabbitmq 的隐藏元素,如图
点击前:

点击后:

用 xpath 无法定位到可以点击的位置,所以我采用元素命名匹配方式定位

WebElement publishMessageButton = driver.findElement(By.xpath("//*[text()='Publish message']"));

成功显示隐藏文本框

四.如何实现批量数据更新?我用的是简单的将数据存入文本,数据是通过 excel 生成的,然后复制粘贴到 txt 文本,java 循环读取即可
数据如图:

java 循环读取文件小 demo

File file = new File("D:\\test.txt");//定义一个file对象,用来初始化FileReader
FileReader reader = new FileReader(file);//定义一个fileReader对象,用来初始化BufferedReader
BufferedReader bReader = new BufferedReader(reader);//new一个BufferedReader对象,将文件内容读取到缓存
StringBuilder sb = new StringBuilder();//定义一个字符串缓存,将字符串存放缓存中
String s = "";
while ((s =bReader.readLine()) != null) {//逐行读取文件内容,不读取换行符和末尾的空格
   sb.append(s + "\n");//将读取的字符串添加换行符后累加存放在缓存中
   System.out.println(s);
   String str = sb.toString();
   System.out.println( str );
}
bReader.close();

最后实现的效果:gif 应该是可以播放的,但是不知道为啥社区无法播放吧 囧

FAQ:
1.除了用 selenium 还有什么方法?
用 selenium 之前,我也尝试使用脚本精灵来录制屏幕,缺点是脚本精灵的录制效率慢,鼠标点击容易出错,如果屏幕中的文档页面位置改变,就需要重新录制脚本
2.为什么不用 postman 回放请求?
通过 chrome 浏览器查看 rabbitmq 的 publish messgae 请求,请求如下:

通过 copy as curl(cmd) 快捷导入 postman,发现请求变成如下:

请求返回值为 400,所以放弃 postman 请求回放


↙↙↙阅读原文可查看相关链接,并与作者交流