zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Web自动化-Selenium自动化测试-11-日期控件问题

日期测试Web自动化 控件 11 selenium 问题
2023-09-11 14:16:28 时间

对于日历设置
一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期,
1. 定位到该input
2. 使用sendKeys 方法 输入日期值

但是,有的日期控件是readonly的
<input id="train_date" class="inp-txt" type="text" value="2020-01-12" name="back_train_date" autocomplete="off" maxlength="10" readonly="readonly" disabled="disabled">
这个时候,没法调用WebElement的sendKeys()
方案一:使用JS remove readonly attribute,然后sendKeys

    WebElement setDatElement=driver.findElement(By.xpath("//input[@id='train_date']"));
        JavascriptExecutor removeAttribute = (JavascriptExecutor)driver;
        String js = "var setDate=document.getElementById(\"train_date\");setDate.removeAttribute('readonly');";
        removeAttribute.executeScript(js) ;
        setDatElement.clear();
//        setDatElement.sendKeys("2020-07-01");
    
        
        String js_value = "$(\"#train_date\").val(\"2020-07-01\")";
        removeAttribute.executeScript(js_value);

方案二:采用click直接选择日期,日期控件是一个iframe的情况下,首先switch iframe,之后找到想要设置的日期button click,然后switch出来
 

WebElement dayElement=driver.findElement(By.xpath("//span[@id='from_imageClick']"));     driver.switchTo().frame(dayElement);        
driver.findElement(By.xpath("//tr/td[@onclick='day_Click(2015,2,21);']")).click();       
driver.switchTo().defaultContent();

下面是12306购票用例

  driver.get("https://www.12306.cn/index/");
        driver.manage().window().maximize();
        driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(60, 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();


        WebElement setDatElement=driver.findElement(By.xpath("//input[@id='train_date']"));
        JavascriptExecutor removeAttribute = (JavascriptExecutor)driver;
        String js = "var setDate=document.getElementById(\"train_date\");setDate.removeAttribute('readonly');";
        removeAttribute.executeScript(js) ;
        setDatElement.clear();
//        setDatElement.sendKeys("2020-07-01");



        String js_value = "$(\"#train_date\").val(\"2020-07-01\")";
        removeAttribute.executeScript(js_value);

        WebElement searchElement=driver.findElement(By.xpath("//*[@id=\"search_one\"]"));
        searchElement.click();

12306购票信息

 driver = getDriver("Chrome");
        url = "https://kyfw.12306.cn/otn/lcxxcx/init";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().window().maximize();
        //打开12306查票页面
        this.driver.get(url);

        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();

        //出发日

        WebElement setDatElement=  this.driver.findElement(By.id("train_start_date"));
        setDatElement.click();
        JavascriptExecutor removeAttribute = (JavascriptExecutor)driver;
        String js = "var setDate=document.getElementById(\"train_start_date\");setDate.removeAttribute('readonly');";
        removeAttribute.executeScript(js) ;
        setDatElement.clear();

        Date date = new Date();
        SimpleDateFormat simpleFormatter =new SimpleDateFormat("YYYY-MM-dd");
        String now = simpleFormatter.format(date);
        System.out.println("now:"+now);

        String js_value = "$(\"#train_start_date\").val(\"2021-01-19\")";
        removeAttribute.executeScript(js_value);


        driver.findElement(By.id("_a_search_btn1")).click();

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //车次类型先全选上
        driver.findElement(By.id("span_station_train_code")).click();
        //取消其他和K字头列车
        driver.findElement(By.xpath("//div[@id='sear-sel-bd']/div[1]/div[2]/ul/li/input[@value='QT']")).click();
        driver.findElement(By.xpath("//div[@id='sear-sel-bd']/div[1]/div[2]/ul/li/input[@value='K']")).click();
        //将所有checkbox的Label和是否选中打印出来
        List<WebElement> ccList = driver.findElements(By.xpath("//div[@id='sear-sel-bd']/div[1]/div[2]/ul/li"));
        for(int i = 0; i < ccList.size(); i ++){
            System.out.printf("%-20s   isSelected:%-20s\n",ccList.get(i).findElement(By.tagName("label")).getText(),
                    ccList.get(i).findElement(By.tagName("input")).isSelected());
        }
        driver.quit();