• Selenium_WebDriver操作iFrame日历框和复选框_Java


    iFrame日历框

    页面上遇到iFrame元素时,先用findElement找到这个iFrame元素,然后再WebDriver.switchTo().frame(calFrame)。在iFrame里操作完成后,记得再切换会原来的窗体WebDriver.switchTo().defaultContent()

    复选框

    复选框是很常见的网页页面元素,操作起来也很easy,findElement找到复选框元素,再使用普通的.click()方式就可以选中或不选中这个checkbox。checkbox.isSelected()则能够查看该复选框是否被选中。

    我自己在操作的过程中遇到一个问题,明明这个元素是能够点击的,有onclick属性,可是ChromeDriver提示说这个元素unclickable…百思不得其解,最后切换回FirefoxDriver,一切正常,能够操作= =#

    另外,測试过程中假设要用到Chrome的话。除了要预先安装好Chrome浏览器。还须要下载ChromeDriver,官方下载地址例如以下:
    http://chromedriver.storage.googleapis.com/index.html?path=2.16/
    下载下来之后放哪里都无所谓事实上,仅仅要在程序里设置一下它的路径就能够正常使用了

    System.setProperty("webdriver.chrome.driver","/Applications/Google Chrome.app/Contents/MacOS/chromedriver");
    this.dr = new ChromeDriver();

    代码块

    package CalendarCheckboxOperation;
    
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import java.util.List;
    
    import java.util.concurrent.TimeUnit;
    
    public class CalendarCheckboxOperation {
        private WebDriver dr;
        private String url;
    
        public CalendarCheckboxOperation(){
            this.dr = new FirefoxDriver();
            this.url = "https://kyfw.12306.cn/otn/lcxxcx/init";
            this.dr.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        }
    
        public void  action(){
            //打开12306查票页面
            this.dr.get(this.url);
            //选择出发城市
            this.dr.findElement(By.id("fromStationText")).click();
            this.dr.findElement(By.cssSelector("ul.popcitylist>li.ac_even.openLi.ac_odd[title='杭州']")).click();
            //选择目的地城市
            this.dr.findElement(By.id("toStationText")).click();
            this.dr.findElement(By.cssSelector("ul.popcitylist>li.ac_even.openLi.ac_odd[title='厦门']")).click();
            this.dr.findElement(By.id("train_start_date")).click();
            //选择日期。日期是一个iFrame。先找到这个iFrame,然后切换窗体到iFrame,再选择日期并点击
            WebElement calFrame = dr.findElement(By.xpath("/html/body/div[11]/iframe"));
            this.dr.switchTo().frame(calFrame);
            this.dr.findElement(By.xpath("/html/body/div[@class='WdateDiv WdateDiv2']/div[3]/table/tbody/tr/td[2]/table/tbody/tr[2]/td[last()]")).click();
            this.dr.switchTo().defaultContent();
            this.dr.findElement(By.id("_a_search_btn1")).click();
            //车次类型先全选上
            this.dr.findElement(By.id("span_station_train_code")).click();
            //取消其它和K字头列车
            this.dr.findElement(By.xpath("//div[@id='sear-sel-bd']/div[1]/div[2]/ul/li/input[@value='QT']")).click();
            this.dr.findElement(By.xpath("//div[@id='sear-sel-bd']/div[1]/div[2]/ul/li/input[@value='K']")).click();
            //将全部checkbox的Label和是否选中打印出来
            List<WebElement> ccList = this.dr.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
    ",ccList.get(i).findElement(By.tagName("label")).getText(),
                        ccList.get(i).findElement(By.tagName("input")).isSelected());
            }
            this.dr.quit();
        }
    
        public static void main(String[] args) {
            CalendarCheckboxOperation cc = new CalendarCheckboxOperation();
            cc.action();
        }
    }

    12306页面及程序执行结果截图

    这里写图片描写叙述

    这里写图片描写叙述

  • 相关阅读:
    时间复杂度和空间复杂度的故事
    Go -- 并发编程的两种限速方法
    Go -- type 和断言 interface{}转换
    Go -- 实现二叉搜索树
    Go语言程序的状态监控
    Go -- 中开启gctrace
    Go --- GC优化经验
    Mysql 性能优化20个原则(4)
    Mysql 性能优化20个原则(3)
    查看 activex 组件的方法
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7002847.html
Copyright © 2020-2023  润新知