1. 程式人生 > >Selenium webdriver操作日曆控制元件

Selenium webdriver操作日曆控制元件

一般的日期控制元件都是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();