Selenium webdriver操作日历控件

发表于:2015-2-02 10:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:to be crazy    来源:51Testing软件测试网采编

  一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期,
  1. 定位到该input
  2. 使用sendKeys 方法
  比如:
  但是,有的日期控件是readonly的
  比如12306的这个
  <input id="train_date" class="inp-txt" type="text" value="2015-03-15" name="back_train_date" autocomplete="off" maxlength="10" readonly="readonly" disabled="disabled">
  这个时候,没法调用WebElement的sendKeys()
  方案一:使用JS remove readonly attribute,然后sendKeys
  还是以万恶的12306为例:
  使用出发日期,将input标签的readonly熟悉去掉
  JavascriptExecutor removeAttribute = (JavascriptExecutor)driver;
  //remove readonly attribute
  removeAttribute.executeScript("var setDate=document.getElementById(\"train_date\");setDate.removeAttribute('readonly');") ;
  方案二:采用click直接选择日期,日期控件是一个iframe,首先switch iframe,之后找到想要设置的日期button click,然后switch出来
  WebElement dayElement=driver.findElement(By.xpath("//span[@id='from_imageClick']"));
  dayElement.click();
  // WebElement frameElement=driver.findElement(By.xpath("//iframe[@border='0']"));
  driver.switchTo().frame(1);
  driver.findElement(By.xpath("//tr/td[@onclick='day_Click(2015,2,21);']")).click();
  driver.switchTo().defaultContent();
  具体代码如下:
WebDriver driver=DriverFactory.getFirefoxDriver();
driver.get("https://kyfw.12306.cn/otn/");
driver.manage().window().maximize();
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
WebElement fromStation=driver.findElement(By.xpath("//input[@id='fromStationText']"));
fromStation.click();
fromStation.sendKeys("郑州");
WebElement choseFrom =driver.findElement(By.xpath("//div/span[@class='ralign' and text()='郑州']"));
choseFrom.click();
WebElement toStation=driver.findElement(By.xpath("//input[@id='toStationText']"));
toStation.click();
toStation.sendKeys("上海");
WebElement choseElement =driver.findElement(By.xpath("//div/span[@class='ralign' and text()='上海']"));
choseElement.click();
JavascriptExecutor removeAttribute = (JavascriptExecutor)driver;
//remove readonly attribute
removeAttribute.executeScript("var setDate=document.getElementById(\"train_date\");setDate.removeAttribute('readonly');") ;
WebElement setDatElement=driver.findElement(By.xpath("//input[@id='train_date']"));
setDatElement.clear();
setDatElement.sendKeys("2015-02-18");
WebElement dayElement=driver.findElement(By.xpath("//span[@id='from_imageClick']"));
dayElement.click();
// WebElement frameElement=driver.findElement(By.xpath("//iframe[@border='0']"));
driver.switchTo().frame(1);
driver.findElement(By.xpath("//tr/td[@onclick='day_Click(2015,2,21);']")).click();
driver.switchTo().defaultContent();
WebElement searchElement=driver.findElement(By.xpath("//div/a[@id='a_search_ticket']"));
searchElement.click();
21/212>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • goodsecret
    2015-10-16 17:16:39

    留名收藏,太J了

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号