【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自动化对非输入框的日历或日期控件的处理

原文地址:https://www.cnblogs.com/xiaozhaoboke/p/11134281.html