前言
一般的日期控件都是input標簽下彈出來的,設置日期使用selenium中的sendKeys 方法就可以解決。
但是我們也會碰到下面的時間日期控件(這個時候這個文本框是不允許我們輸入時間的)如圖:

這個時候,沒法調用WebElement的sendKeys(),像這種選擇時間的input標簽都會有一個readonly屬性,這個時候我們就只能選擇時間,不能手動輸入,那么這種情況,我們該怎么處理呢?
通過JS選擇日期
具體代碼示例如下:
/** * 通過JS選擇日期 */ @Test public void testByJs() { driver.get("https://huoche.cncn.com/train-%B4%F3%C1%AC-%C9%F2%D1%F4"); driver.manage().window().maximize(); JavascriptExecutor removeAttribute = (JavascriptExecutor) driver; //remove readonly attribute removeAttribute.executeScript("var setDate=document.getElementById(\"date\").removeAttribute('readonly');"); //輸入要輸入日期 driver.findElement(By.id("date")).clear(); driver.findElement(By.id("date")).sendKeys("2019-08-31"); //點擊查詢 driver.findElement(By.id("searchBtn")).click(); //獲取輸入后日期顯示 String value = driver.findElement(By.id("date")).getAttribute("value"); //驗證日期是否為選中的8月31日 Assert.assertEquals(value,"2019-08-31"); }
通過Iframe選擇日期
具體代碼示例如下:
/** * 通過Iframe選擇日期 */ @Test public void testByIframe() { driver.get("https://huoche.cncn.com/train-%B4%F3%C1%AC-%C9%F2%D1%F4"); driver.manage().window().maximize(); //點擊日歷控件 driver.findElement(By.id("date")).click(); //iframe框 WebElement iframe = driver.findElement(By.cssSelector("[src='about\\:blank']")); //進入日歷控件中操作 driver.switchTo().frame(iframe); //選擇31號即月末 driver.findElement(By.xpath("//tr/td[@onclick='day_Click(2019,8,31);']")).click(); //跳出日歷控件操作 driver.switchTo().defaultContent(); //點擊查詢 driver.findElement(By.id("searchBtn")).click(); //獲取輸入后日期顯示 String value = driver.findElement(By.id("date")).getAttribute("value"); //驗證日期是否為選中的8月31日 Assert.assertEquals(value,"2019-08-31"); }
以上兩種方法,都可實現選擇日期操作,僅供參考,如果覺得好,可以關注我哦
