这篇介绍webdriver如何处理日历控件,有些web产品,网页上有一些时间选择,然后支持按照不同时间段范围去筛选数据。网页上日历控件一般,是一个文本输入框,鼠标点击,就会弹出日历界面,可以选择具体日期。这篇,就是介绍用selenium如何自动化脚本实现。
1.先看一个完全模仿手工操作的场景,点击输入框,点击下一个月,选择17日。当前是2017=07-01,假如我们要设置成2017-08-17.
package lessons;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class HandleDate {
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
driver.get("http://jqueryui.com/resources/demos/datepicker/default.html");
Thread.sleep(2000);
// 日期输入框
WebElement date_inputbox = driver.findElement(By.id("datepicker"));
//鼠标点击日期输入框
date_inputbox.click();
// 点击下一个月
driver.findElement(By.xpath("//*[@id='ui-datepicker-div']/div/a[@data-handler='next']")).click();
// 点击17日,xpath定义第三行第五个元素,可能每个月排序不一样,所以不一定点击的就是17日
driver.findElement(By.xpath("//*[@id='ui-datepicker-div']/table/tbody/tr[3]/td[5]/a")).click();
}
}
运行发现,确实可以实现选择时间,但是这样是不是太麻烦和啰嗦,上面的定义了第三行第五列,但是不同月份,这个值肯定不相同。有没有更好的方法呢?当然有,如果遇到这样的日期控件,直接把当做正常的文本输入框,然后调用sendKeys()方法,直接传一个带格式的日期数据进入就可以。
package lessons;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ElementOpration {
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
driver.get("http://jqueryui.com/resources/demos/datepicker/default.html");
Thread.sleep(2000);
// 日期输入框
WebElement date_inputbox = driver.findElement(By.id("datepicker"));
date_inputbox.sendKeys("08/17/2017");
}
}