本人在使用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); }