1)Qunar机票搜索场景访问Qunar机票首页http://flight.qunar.com,选择“单程”,输入出发、到达城市,选择today+7日后的日期,点“搜索”,跳转到机票单程搜索列表页。2)在列表页停留1分钟,至到页面上出现“搜索结束”。3) 如果出现航班列表,随机点选“订票”按钮.
代码思路:
1)定义变量及浏览器启停方法和硬等待方法
publicWebDriverdr;
privateDatefromDate;
privateSimpleDateFormatsdf;
//启动火狐浏览器
publicvoidstartFireFox(){
dr=newFirefoxDriver();
dr.manage().window().maximize();
}
//关闭浏览器病释放资源
publicvoidcloseFireFox(){
dr.close();
dr.quit();
}
//导航到相关页面
publicvoidgoToUrl(String url){
dr.navigate().to(url);
}
//设置硬等待方法
publicvoidwaitSix(){
try{
Thread.sleep(6000);
}catch(InterruptedException e) {
//TODOAuto-generated catch block
e.printStackTrace();
}
}
2)建几个获取页面元素方法
不需要智能等待就可以获取元素
privateWebElement
getElementNotWait(finalBy by){
WebElement
element =null;
try{
element
=dr.findElement(by);
}catch(Exception e){
element
=null;
}
returnelement;
}
智能等待获取页面单个元素
//通过driver、等待时间(智能等待)、by获取页面元素
privateWebElement getElementNeedWait(WebDriver driver,intwaittime,finalBy by){
WebElement
ele =null;
booleanflag =newWebDriverWait(driver, waittime)
.until(newExpectedCondition<Boolean>() {
publicBoolean apply(WebDriver d) {
returnd.findElement(by).isDisplayed();
}
});
if(flag){
ele = driver.findElement(by);
}
returnele;
}
智能等待获取页面元素集
//通过driver、等待时间(智能等待)、by获取页面元素
privateWebElement getElementNeedWait(WebDriver driver,intwaittime,finalBy by){
WebElement
ele =null;
booleanflag =newWebDriverWait(driver, waittime)
.until(newExpectedCondition<Boolean>() {
publicBoolean apply(WebDriver d) {
returnd.findElement(by).isDisplayed();
}
});
if(flag){
ele = driver.findElement(by);
}
returnele;
}
3)建时间处理方法
// 获取当前的日期字符串
privateString getFromDate() {
fromDate=newDate();
sdf=newSimpleDateFormat("yyyy-MM-dd");
returnsdf.format(fromDate);
}
//获得7天后的日期的字符串
privateString getToSevenDate() {
fromDate=newDate();
sdf=newSimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(fromDate);
c.add(Calendar.DAY_OF_MONTH, +7);
returnsdf.format(c.getTime());
}
4)获得给定数量x的【0,x-1】间的随机整数
privateintgetRandom(intcount) {
return(int) Math.round(Math.random() *
(count - 1));
}
5)去哪儿网订票示例方法
publicvoidtestBooking(){
//获取单选框元素并点击
this.getElementNeedWait(dr, 10, By.id("searchTypeSng")).click();
//获取出发城市输入框,清空并设置相关内容
this.getElementNeedWait(dr, 10, By.name("fromCity")).clear();
this.getElementNeedWait(dr, 10, By.name("fromCity")).sendKeys("杭州(HGH)");
//获取到达城市输入框,清空并设置相关内容
this.getElementNeedWait(dr, 10, By.name("toCity")).clear();
this.getElementNeedWait(dr, 10, By.name("toCity")).sendKeys("**(SZX)");
//获得出发日期输入框,清空并设置当前日期后七天的日期字符
this.getElementNeedWait(dr, 10, By.id("fromDate")).clear();
this.getElementNeedWait(dr, 10, By.id("fromDate")).sendKeys(this.getFromDate());
//获得搜索框按钮,点击搜索
this.getElementNeedWait(dr, 10, By.cssSelector(".btn_search")).click();
//定位搜索出来的航班信息列表中有订票信息的元素
By
by1 = By.xpath(".//*[@class='a-booking']//a[@class='btn-book']"
List<WebElement> listElements
=this.getAllResultElement(dr,60,by1);
WebElement
elementButton =null;
//如果获取的页面元素集为空,则没有合适的航班,如果有则随机选择航班并点击订票按钮
if(listElements.isEmpty()){
System.out.println("该时间内两城市间没有合适的航班可选择!");
}else{
elementButton
= listElements.get(this.getRandom(listElements.size()));
elementButton.click();
}
this.waitSix();
}
6)最后通过main函数调用相关方法