51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1274|回复: 0
打印 上一主题 下一主题

关于去哪儿网的UI自动化测试脚本

[复制链接]
  • TA的每日心情
    奋斗
    2021-8-6 16:14
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2018-4-11 14:10:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    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. }
    复制代码


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-17 22:29 , Processed in 0.063467 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表