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

原创 2015年07月07日 18:29:47

iFrame日历框

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

复选框

复选框是非常常见的网页页面元素,操作起来也非常简单,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\n",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页面及程序运行结果截图

这里写图片描述

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

selenium处理复选框radio

网页上有时候遇到checkbox和radio,一般情况下这两种都是input标签,我们可以通过点击或者发送空格的方式进行选中 试验网页代码checkandradio.html: Checkbo...
  • qq_27231343
  • qq_27231343
  • 2016年10月22日 16:17
  • 2124

selenium之 时间日期控件的处理

很多人问时间日期的空间怎么处理,但是时间日期控件各种各样,你可能遇到正常点的像这样: 当然也可能遇到难点的,像这样: 当然,也不排除会遇到变态的,像这样: 呵呵,真要一个个想着怎么去选择,简直是...
  • huilan_same
  • huilan_same
  • 2016年08月31日 15:13
  • 9444

selenium 操作日期控件

日期控件大都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法  比如: 但是,有的日...
  • linxi9322
  • linxi9322
  • 2017年12月13日 15:49
  • 180

selenium日期控件的处理之拖拽选择

很多时候,日期控件可以当做一个input输入框。但是也有时候,单纯的赋值,并不会触发控件之间的关联效果,就一定要通过选择的方式设置控件。 由于也是刚接触selenium,这里就以最近处理的日期控件作为...
  • suregirls00
  • suregirls00
  • 2017年02月22日 09:45
  • 773

请教:日期选择框,selenium如何定位页面元素

日期选择框,selenium如何定位页面元素
  • wjok2009
  • wjok2009
  • 2014年12月24日 16:20
  • 3186

selenium+python关于操作日历控件实现向日历文本框传递值的方法

感谢:需要感谢“天空”的帮助,
  • u012189659
  • u012189659
  • 2014年06月23日 17:30
  • 3352

Selenium webdriver操作日历控件

一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期,   1. 定位到该input   2. 使用sendKeys 方法   比如:   但是,有的日期控件...
  • wanglha
  • wanglha
  • 2015年03月25日 13:39
  • 1438

Selenium webdriver操作日历控件

一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 日期控件是readonly的 方案一:使用JS rem...
  • heart_1014
  • heart_1014
  • 2016年07月26日 14:14
  • 1248

selenium如何选中某个checkbox

#选中某个checkbox #第一种方法用xpath checkboxs = bigc_Driver.find_elements_by_xpath("//input[@type='checkbox']...
  • songsean
  • songsean
  • 2014年04月19日 15:48
  • 3436

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

WebDriver操作iFrame日历框和复选框
  • sophie2805
  • sophie2805
  • 2015年07月07日 18:29
  • 1689
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Selenium_WebDriver操作iFrame日历框和复选框_Java
举报原因:
原因补充:

(最多只允许输入30个字)