【java+selenium3】时间控件 (九)
1、问题描述:
在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就有点难了。
如图:
2、想法:
其实很简单,把它当做输入框来看就好了,使用selenium的sendKeys对输入框输入日期则可。
driver.findElement(By.id("train_date")).sendKeys("2019-07-04");
3、想法是很美好的,但是有时候实行起来却不执行,这个时候我们就要仔细去看看前端的代码了,代码如下:
4、这个时候我们就要借助执行 js 脚本来移除readonly的属性,问题就轻轻松松解决了,代码如下:
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; String js = "document.getElementById('train_date').removeAttribute('readonly')"; jsExecutor.executeScript(js);//执行js
5.整体代码实现;
package cn.test; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor;//注意不要倒错包 import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class TestCase { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe"); WebDriver driver =new ChromeDriver(); try { driver.get("https://www.12306.cn/index/"); Thread.sleep(5000); //执行方式 JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; String js = "document.getElementById('train_date').removeAttribute('readonly')"; jsExecutor.executeScript(js);//执行js,将readonly属性去掉后就可以写入日期 driver.findElement(By.id("train_date")).clear();//写入前清除数据 driver.findElement(By.id("train_date")).sendKeys("2019-07-07");//写入期望日期 Thread.sleep(5000); } catch (Exception e) { e.printStackTrace(); }finally { System.out.println("执行结束,关闭浏览器!"); driver.quit(); } } }
6.学习后总结,不足之处后续补充!
参考博文:Java+Selenium自动化对非输入框的日历或日期控件的处理