本人在使用selenium作测试的时候,有时候须要去后台管理界面去设置一些测试数据,因此写了一些脚本,有一个比较有表明性的,由于这里的设置按钮和课程详情并不在一个页面,而是在列表页面。因此查找起来比较麻烦。先分享代码,供你们参考。html
先放一下后台的页面和xml信息: java
下面是个人代码:编程
//设置秒杀价 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); }