關於去哪兒網的UI自動化測試腳本

UI自動化測試
Qunar機票搜索場景
訪問Qunar機票首頁http://flight.qunar.com,選擇「單程」,輸入出發、到達城市,選擇today+7往後的日期,點「搜索」,跳轉到機票單程搜索列表頁。
在列表頁停留1分鐘,至到頁面上出現「搜索結束」。
若是出現航班列表,對於出現「每段航班均需繳納稅費」的行隨機點選「訂票」按鈕,在展開的列表中會出現「第一程」、 「第二程」;對於沒有出現「每段航班均需繳納稅費」的行隨機點選「訂票」按鈕,在展開的列表底部中會出現「報價範圍」
若是不出現航班列表,則頁面會出現「該航線當前無可售航班」
請使用maven建立java工程,引入Selenium框架,編寫WebUI代碼,實現上述人工操做和驗證。要求能隨機驗證100個城市對的3個月內的任意搜索條件。java

package com.test;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Demo3 {

	public WebDriver driver;

	private int waitTime = 20;

	private Date fromDate;

	private SimpleDateFormat sdf;

	@BeforeClass
	public void setUp() {
		driver = new FirefoxDriver();
		driver.manage().window().maximize();
	}

	@AfterClass
	public void tearDown() {
		driver.close();
		driver.quit();
	}

	private WebElement getElement(final By by) {
		boolean flag = new WebDriverWait(driver, waitTime)
				.until(new ExpectedCondition<Boolean>() {
					public Boolean apply(WebDriver d) {
						return d.findElement(by).isDisplayed();
					}
				});
		WebElement element = null;
		if (flag) {
			element = driver.findElement(by);
		}
		return element;
	}

	private WebElement getElementNotWait(final By by) {
		WebElement element = null;
		try {
			element = driver.findElement(by);
		} catch (Exception e) {
			element = null;
		}
		return element;	}

	private String getFromDate() {
		fromDate = new Date();
		sdf = new SimpleDateFormat("yyyy-MM-dd");
		return sdf.format(fromDate);
	}

	private String getToDate() {
		Calendar c = Calendar.getInstance();
		c.setTime(fromDate);
		c.add(Calendar.DAY_OF_MONTH, +7);
		return sdf.format(c.getTime());
	}

	private ArrayList<WebElement> getAllResultElement() {
		int labelIndex = 1;
		int rowIndex = 1;
		ArrayList<WebElement> list = new ArrayList<WebElement>();
		while (true) {
			if (this.getElementNotWait(By.xpath("//div[@class='outContainer']/div[" + labelIndex + "]")) != null) {
				if (this.getElementNotWait(By.xpath("//div[@class='outContainer']/div[" + labelIndex + "]/div[starts-with(@id,'itemRowXI')][" + rowIndex + "]")) != null) {
					list.add(this.getElementNotWait(By.xpath("//div[@class='outContainer']/div["+ labelIndex + "]/div[starts-with(@id,'itemRowXI')]["	+ rowIndex + "]")));
					rowIndex++;
				} else{
					labelIndex++;
					rowIndex = 1;
				}
			} else
				break;
		}
		return list;
	}

	private int getRandom(int count) {
		return (int) Math.round(Math.random() * (count - 1));
	}
	
	private void sleep(int s){
		try {
			Thread.sleep(s*1000);
		} catch (InterruptedException e) {			
			e.printStackTrace();
		}
	}

	@Test
	public void process() {
		driver.navigate().to("http://flight.qunar.com/");
		this.getElement(By.id("searchTypeSng")).click();
		this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='fromCity']")).clear();
		this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='fromCity']")).sendKeys("武漢");
		this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='toCity']")).clear();
		this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='toCity']")).sendKeys("北京");
		this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='fromDate']")).clear();
		this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='fromDate']")).sendKeys(this.getFromDate());
		this.getElementNotWait(By.xpath("//div[@id='dom_arrivalDateDiv_disable']//div[@class='sicon']")).click();
		JavascriptExecutor j =(JavascriptExecutor)driver;
		j.executeScript("$('input[name=toDate]').val('"+this.getToDate()+"')");
		this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//button[text()='搜 索']")).click();
		this.sleep(10);
		this.getElement(By.xpath("//div[@class='outContainer']"));
		ArrayList<WebElement> all = this.getAllResultElement();
		int random = this.getRandom(all.size());
		WebElement element = all.get(random);
		String id = element.getAttribute("id");
		String lindId = id.replace("itemRow", "btnBook");
		this.getElement(By.xpath("//a[@id='"+lindId+"']")).click();
		this.sleep(10);
	}	
}
相關文章
相關標籤/搜索