小白第一次写测试文章,求大佬轻锤!!!
先贴代码
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 请求回放