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

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页面及程序运行结果截图

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

时间: 2024-08-09 14:42:21

Selenium_WebDriver操作iFrame日历框和复选框_Java的相关文章

JQ 操作样式,单选按钮跟复选框

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title></title> <scri

Selenium—选择框的相关操作(单选框、多选框、复选框、下拉框)

编辑框 无缺省值:第二个输入框 可直接对输入框进行编辑: driver.find_element_by_id('input2').send_keys('selenium') 有缺省值:第一个输入框,默认 test 此时,如果我们直接对第一个输入框进行编辑,会发现与预期结果不符 driver.find_element_by_id('input1').send_keys('selenium') 因此,如果需要对存在默认值的输入框进行编辑,则需先进行清楚操作,然后再进行编辑 driver.find_e

selenium3+python自动化10-基本操作2(单选框、复选框、table定位)

一.前言 本次总结是对之前内容的扩充selenium3+python自动化6-基本操作总结(键盘.鼠标.select下拉框) ,包含单元框和复选框操作.table定位等内容. 二.单选框(radiobox)和复选框(checkbox)操作 1.认识单选框和复选框 html代码如下: <html> <head> <title>单选和复选</title> </head> <body> </form> <h4>单选:

Selenium2+python自动化19-单选框和复选框

本篇主要介绍单选框和复选框的操作 一.认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的:下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了,可以先抽他了. 二.radio和checkbox源码 1.上图的html源码如下,把下面这段复杂下来,写到文本里,后缀改成.html就可以了. <html> <head> <meta http-equiv="content-type" content=&qu

html与用户交互中单选框与复选框&amp;下拉列表中的情况

使用单选框.复选框,让用户选择 在使用表单设计调查表时,为了减少用户的操作,使用选择框是一个好主意,html中有两种选择框,即单选框和复选框,两者的区别是单选框中的选项用户只能选择一项,而复选框中用户可以任意选择多项,甚至全选.请看下面的例子: 语法: <input type="radio/checkbox" value="值" name="名称" checked="checked"/> 1.type: 当 typ

使用单选框、复选框,让用户选择

在使用表单设计调查表时,为了减少用户的操作,使用选择框是一个好主意,html中有两种选择框,即单选框和复选框,两者的区别是单选框中的选项用户只能选择一项,而复选框中用户可以任意选择多项,甚至全选.请看下面的例子: 语法: <input type="radio/checkbox" value="值" name="名称" checked="checked"/> 1.type: 当 type="radio&qu

Selenium2+python自动化19-单选框和复选框(radiobox、checkbox)【转载】

本篇主要介绍单选框和复选框的操作 一.认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的:下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了,可以先抽他了. 二.radio和checkbox源码 1.上图的html源码如下,把下面这段复杂下来,写到文本里,后缀改成.html就可以了. <html>      <head>      <meta http-equiv="content-type" c

章节十一、5-单选框和复选框

以下演示操作以该网站为例:https://learn.letskodeit.com/p/practice Radio Button单选框:同时只能选择一个 Checkbox复选框:能够同时选择多个 一.如何判断单选框和复选框 1.按F12打开开发者选项 2.鼠标定位到需要确认的元素 3.查看该元素的type属性中是否显示为“radio”或者“checkbox” 二.对图中的“Bmw.Benz”单选款和“Bmw.Benz”复选框进行操作 1 package basicweb; 2 3 import

[CSS揭秘]自定义单选框和复选框

很多Web前端工程师肯定都会遇到过,在项目中,UI设计师跑来跟你说,我这个地方的表单控件需要设计成这个样子那个样子.但是用CSS却不能够修改这些控件的默认样式,于是乎,只能通过div+javascript技术来进行模拟.特别是在如今移动端的崛起时代,更加注重用户的体验.于是就更加需要这样一种hack技术. 如果对如今的前端框架有过了解,都会知道组件这个概念.那么在这些框架中,都会提供一些单选框或复选框按钮组件.可见大家之前受到表单元素的默认样式的毒害有多深. 今天先给大家简单介绍一下如何通过CS

vue.js实现单选框、复选框和下拉框

Vue.js可以很方便的实现数据双向绑定,所以在处理表单,人机交互方面具有很大的优势.下边以单选框.复选框和下拉框为例介绍他们在HTML和Vue.js中的具体实现方式. 一.单选框 在传统的HTML中实现单选框的方法如下: <div id="app"> <input type="radio" name="gender" value="man" id="man"/><label