本人在使用selenium做测试的时候,有时候需要去后台管理界面去设置一些测试数据,所以写了一些脚本,有一个比较有代表性的,因为这里的设置按钮和课程详情并不在一个页面,而是在列表页面。所以查找起来比较麻烦。先分享代码,供大家参考。
先放一下后台的页面和xml信息:
下面是我的代码:
//设置秒杀价
public void setSeckillPriceByCourseId(int courseId, int price) throws InterruptedException {
clickCourse();//点击进去课程列表
clickFormalCourse();//选择班课列表
int status = findCourseByIdAndSetSeckillPrice(courseId, price);//根据courseid查找班课设置秒杀价
if (status != 2) {
outpu(status, "设置秒杀价失败!");
}
}
下面是具体的方法:
/*
* 分页遍历课程,查找相应班课
* 返回值1:找到该课程,2:设置秒杀价完成,3:已经开始秒杀,4前四页未找到该课程
*/
public int findCourseByIdAndSetSeckillPrice(int courseId, int price) throws InterruptedException {
int times = 0;//标记页面
int mark = 0;//标记状态
sleep(0);
while(true) {
times++;
List<WebElement> seckills = findElementsByPartialText("秒杀");//获取所有秒杀状态按钮集合
for (int i = 0; i < seckills.size(); i++) {//遍历集合中所有元素
//获取date_course_id,来判断是否是等于参数id,然后点击
String course = seckills.get(i).getAttribute("data-course_id");//获取该元素对应课程id
if (course.equals(courseId+"")) {//比较id
mark = 1;//更改标记,表示发现课程
String status = seckills.get(i).getText();//获取秒杀状态
// output(status);
if (status.equals("开始秒杀")) {
scrollToElement(seckills.get(i));//滚动到该元素
clickByJs(seckills.get(i));//通过js点击
sleep(0);
findElementByIdAndClearSendkeys("input-modal_promotion_price", price);//设置秒杀价
findElementByIdAndClick("btn-ok-product_promotion");//确定
boolean key = true;
while(key){//等待保存完毕,再次确认
if (exists(By.xpath("/html/body/div[7]/h2")) && getTextByXpath("/html/body/div[7]/h2").equals("操作成功")) {
key = false;
break;
}
}
clickSure();
output("设置秒杀价成功!");
mark = 2;//更改标记,表示已经完成秒杀
} else if (status.equals("结束秒杀")) {
output("该课程已经开始秒杀了!");
mark = 3;//标记,表示已经在秒杀了
output("已经开始秒杀!");
}
}
}//遍历结束
if (mark != 0) {
return mark;
}
if (times > 2) {
output("未找到该课程!");
mark = 4;//更改标记,表示未找到
return mark;
}
}
}
中间js滚动到 某个元素的方法:
//滚动到某个元素
public void scrollToElement(WebElement element) {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView(true);", element);
}
中间js点击某个元素的方法:
//通过js点击
public void clickByJs(WebElement element) {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", element);
//第二种点击方法
// ((JavascriptExecutor) driver).executeScript("arguments[0].click()", question);
}
技术类文章精选
- java一行代码打印心形
- Linux性能监控软件netdata中文汉化版
- 接口测试代码覆盖率(jacoco)方案分享
- 性能测试框架
- 如何在Linux命令行界面愉快进行性能测试
- 图解HTTP脑图
- 如何测试概率型业务接口
- httpclient处理多用户同时在线
- 将swagger文档自动变成测试代码
- 五行代码构建静态博客
- httpclient如何处理302重定向
- 基于java的直线型接口测试框架初探