基于selenium + java实现的携程机票预订功能:
import java.util.List; import junit.framework.Assert; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.By; /* * 国内单程机票预订,请严格按照以下流程完成操作: 打开 http://flights.ctrip.com/ * 选择航程:国内 - 单程 输入出发城市,然后按下回车。如:南京 输入到达城市,然后按下回车。如: * 北京 * 输入出发日期,不要按下回车。如:2017-07-01 * 选择航班,点击 订票 按钮 选 * 择舱位,点击 预订 按钮 * 如果提示是否登陆,选择 不登陆-直接订票 输入乘机人姓名(你的名字)。如:张三 * 注意: 出发、到达城市支持多 * 种格式,任选以下之一:中文,拼音,机场ICAO代码 出发、到达城市输入后,务必在对应输入框中按下回车 * 出发日期注意格式 从列表中点选出发城市、到达城市、出发日期不记分 */ public class Example { // Mooctest Selenium 测试脚本样例 // 你可以在这个文件的基础上编写测试用例 // <!> 请不要忘记把 JUnit 和 Selenium 库添加到工程编译路径 @SuppressWarnings("deprecation") static public void test(WebDriver driver) throws InterruptedException { // 在这里写测试脚本,driver为Selenium WebDriver实例 // eg:driver.get("https://www.baidu.com/") // eg:driver.findElement(By.id("wd")); String url="http://flights.ctrip.com/"; driver.get(url);//打开URL //等待广告结束--这一点很重要! Thread.sleep(15000); Assert.assertEquals(driver.getTitle(), "【携程机票】飞机票查询,机票预订,机票价格查询,打折特价机票"); //选择国内-单程;默认已经是单程;此处没有分 //driver.findElement(By.id("radio_D")).click();//往返的选项 //driver.findElement(By.id("radio_M")).click();//多程的选项 driver.findElement(By.id("radio_S")).click();//单程的选项 //输入出发城市---中文、拼音、简拼 WebElement from=driver.findElement(By.id("DepartCity1TextBox")); from.click(); from.sendKeys("南京");//11.11分 //回车 from.sendKeys(Keys.ENTER);//11.11,现在是22.22 WebElement to=driver.findElement(By.id("ArriveCity1TextBox")); to.click();//no point to.sendKeys("北京");//11.11 to.sendKeys(Keys.ENTER);//11.11 //出发日期 driver.findElement(By.id("DepartDate1TextBox")).sendKeys("2017-07-01");//没办法自己选择,no point //返回日期不能输入,否则会变成回返 //driver.findElement(By.id("ReturnDepartDate1TextBox")).sendKeys("2017-6-25"); driver.findElement(By.xpath("//*[@id='search_box']/div[1]/h3[1]")).click();//点击一下消除日期框,ok,but no point //搜索 driver.findElement(By.id("search_btn")).click();//报错 //driver.findElement(By.id("DepartDate1TextBox")).sendKeys(Keys.ENTER); //选择航班 driver.findElement(By.xpath("//*[@id='J_flightFilter']/ul/li[2]")).click();; driver.findElement(By.xpath("//*[@id='J_flightFilter']/ul/li[2]/div/ul/li[1]/label")).click(); //仓位 driver.findElement(By.xpath("//*[@id='J_flightFilter']/ul/li[5]")).click();//*[@id="J_bar_filter"]/li[5] driver.findElement(By.xpath("//*[@id='J_flightFilter']/ul/li[5]/div/ul/li[1]/label")).click(); //*[@id="J_flightFilter"]/ul/li[5]/div/ul/li[1]/label //订票 driver.findElement(By.xpath("//*[@id='flight_MU2811']/table/tbody/tr/td[8]/button")).click(); //预订 //driver.findElement(By.xpath("//*[@id='flight_MU2811']/table/tbody/tr/td[8]/button")).click(); driver.findElement(By.xpath("//*[@id='J_flightBookBtn83']")).click(); //*[@id="J_flightBookBtn83"] Thread.sleep(10000); //不登录,直接预订 driver.findElement(By.xpath("//*[@id='sso_btnDirectBook']")).click(); driver.findElement(By.xpath("//*[@id='p_name_0']")).click(); driver.findElement(By.xpath("//*[@id='p_name_0']")).sendKeys("张三"); Thread.sleep(3000); } static public void main(String[] args) { // 你可以直接运行来进行调试,此时不会评分 WebDriver driver = new ChromeDriver(); try { test(driver); } catch(Exception e) { e.printStackTrace(); } finally { driver.quit(); } } }
PS:测试网站见URL。
总感觉这种测试很不靠谱的样子。。。