51Testing软件测试论坛

标题: 关于去哪儿网的UI自动化测试脚本 [打印本页]

作者: 一纸荒年    时间: 2018-4-11 14:10
标题: 关于去哪儿网的UI自动化测试脚本
UI自动化测试
Qunar机票搜索场景
访问Qunar机票首页http://flight.qunar.com,选择“单程”,输入出发、到达城市,选择today+7日后的日期,
点“搜索”,跳转到机票单程搜索列表页。
在列表页停留1分钟,至到页面上出现“搜索结束”。
如果出现航班列表,对于出现“每段航班均需缴纳税费”的行随机点选“订票”按钮,在展开的列表中会出现“第
一程”、 “第二程”;对于没有出现“每段航班均需缴纳税费”的行随机点选“订票”按钮,在展开的列表底部中会
出现“报价范围”
如果不出现航班列表,则页面会出现“该航线当前无可售航班”
请使用maven创建java工程,引入Selenium框架,编写WebUI代码,实现上述人工操作和验证。要求能随机
验证100个城市对的3个月内的任意搜索条件。

  1. package com.test;

  2. import java.text.SimpleDateFormat;
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import java.util.Date;

  6. import org.openqa.selenium.By;
  7. import org.openqa.selenium.JavascriptExecutor;
  8. import org.openqa.selenium.WebDriver;
  9. import org.openqa.selenium.WebElement;
  10. import org.openqa.selenium.firefox.FirefoxDriver;
  11. import org.openqa.selenium.support.ui.ExpectedCondition;
  12. import org.openqa.selenium.support.ui.WebDriverWait;
  13. import org.testng.annotations.AfterClass;
  14. import org.testng.annotations.BeforeClass;
  15. import org.testng.annotations.Test;

  16. public class Demo3 {

  17.     public WebDriver driver;

  18.     private int waitTime = 20;

  19.     private Date fromDate;

  20.     private SimpleDateFormat sdf;

  21.     @BeforeClass
  22.     public void setUp() {
  23.         driver = new FirefoxDriver();
  24.         driver.manage().window().maximize();
  25.     }

  26.     @AfterClass
  27.     public void tearDown() {
  28.         driver.close();
  29.         driver.quit();
  30.     }

  31.     private WebElement getElement(final By by) {
  32.         boolean flag = new WebDriverWait(driver, waitTime)
  33.                 .until(new ExpectedCondition<Boolean>() {
  34.                     public Boolean apply(WebDriver d) {
  35.                         return d.findElement(by).isDisplayed();
  36.                     }
  37.                 });
  38.         WebElement element = null;
  39.         if (flag) {
  40.             element = driver.findElement(by);
  41.         }
  42.         return element;
  43.     }

  44.     private WebElement getElementNotWait(final By by) {
  45.         WebElement element = null;
  46.         try {
  47.             element = driver.findElement(by);
  48.         } catch (Exception e) {
  49.             element = null;
  50.         }
  51.         return element;<br> }

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

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

  63.     private ArrayList<WebElement> getAllResultElement() {
  64.         int labelIndex = 1;
  65.         int rowIndex = 1;
  66.         ArrayList<WebElement> list = new ArrayList<WebElement>();
  67.         while (true) {
  68.             if (this.getElementNotWait(By.xpath("//div[@class='outContainer']/div[" + labelIndex + "]")) != null) {
  69.                 if (this.getElementNotWait(By.xpath("//div[@class='outContainer']/div[" + labelIndex + "]/div[starts-with(@id,'itemRowXI')][" + rowIndex + "]")) != null) {
  70.                     list.add(this.getElementNotWait(By.xpath("//div[@class='outContainer']/div["+ labelIndex + "]/div[starts-with(@id,'itemRowXI')]["   + rowIndex + "]")));
  71.                     rowIndex++;
  72.                 } else{
  73.                     labelIndex++;
  74.                     rowIndex = 1;
  75.                 }
  76.             } else
  77.                 break;
  78.         }
  79.         return list;
  80.     }

  81.     private int getRandom(int count) {
  82.         return (int) Math.round(Math.random() * (count - 1));
  83.     }
  84.      
  85.     private void sleep(int s){
  86.         try {
  87.             Thread.sleep(s*1000);
  88.         } catch (InterruptedException e) {         
  89.             e.printStackTrace();
  90.         }
  91.     }

  92.     @Test
  93.     public void process() {
  94.         driver.navigate().to("http://flight.qunar.com/");
  95.         this.getElement(By.id("searchTypeSng")).click();
  96.         this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='fromCity']")).clear();
  97.         this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='fromCity']")).sendKeys("武汉");
  98.         this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='toCity']")).clear();
  99.         this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='toCity']")).sendKeys("北京");
  100.         this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='fromDate']")).clear();
  101.         this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//input[@name='fromDate']")).sendKeys(this.getFromDate());
  102.         this.getElementNotWait(By.xpath("//div[@id='dom_arrivalDateDiv_disable']//div[@class='sicon']")).click();
  103.         JavascriptExecutor j =(JavascriptExecutor)driver;
  104.         j.executeScript("$('input[name=toDate]').val('"+this.getToDate()+"')");
  105.         this.getElement(By.xpath("//div[@id='js_flighttype_tab_domestic']//button[text()='搜 索']")).click();
  106.         this.sleep(10);
  107.         this.getElement(By.xpath("//div[@class='outContainer']"));
  108.         ArrayList<WebElement> all = this.getAllResultElement();
  109.         int random = this.getRandom(all.size());
  110.         WebElement element = all.get(random);
  111.         String id = element.getAttribute("id");
  112.         String lindId = id.replace("itemRow", "btnBook");
  113.         this.getElement(By.xpath("//a[@id='"+lindId+"']")).click();
  114.         this.sleep(10);
  115.     }  
  116. }
复制代码







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2