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();
其中:DriverFactory
package com.packt.webdriver.chapter3;
import java.io.File;
import java.io.IOException;
import java.util.Arrays; import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.os.WindowsUtils;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities; public class DriverFactory { public static WebDriver getHtmlUnit()
{
HtmlUnitDriver ht=new HtmlUnitDriver();
return ht;
}
public static WebDriver getChromeDriver() { // TODO Auto-generated method stub
String chromdriver="E:\\chromedriver.exe";
System.setProperty("webdriver.chrome.driver", chromdriver);
ChromeDriverService.Builder builder=new ChromeDriverService.Builder();
File file=new File(chromdriver);
// int port=12643;
// ChromeDriverService service=builder.usingDriverExecutable(file).usingPort(port).build();
// try {
// service.start();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
ChromeOptions options = new ChromeOptions();
options.addExtensions(new File(""));
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches",
Arrays.asList("--start-maximized"));
options.addArguments("--test-type", "--start-maximized");
WebDriver driver=new ChromeDriver(options);
return driver;
}
public static WebDriver getFirefoxDriver()
{
try
{
WindowsUtils.tryToKillByName("firefox.exe");
}
catch(Exception e)
{
System.out.println("can not find firefox process");
}
File file=new File("d:\\firebug-2.0.4-fx.xpi");
FirefoxProfile profile = new FirefoxProfile();
// profile.setPreference("network.proxy.type", 2);
// profile.setPreference("network.proxy.autoconfig_url", "http://proxy.successfactors.com:8083");
// profile.setPreference("network.proxy.no_proxies_on", "localhost");
// // profile.setPreference("network.proxy.http", "proxy.domain.example.com");
// profile.setPreference("network.proxy.http_port", 8080);
// profile.setPreference("network.proxy.ssl", "proxy.domain.example.com");
// profile.setPreference("network.proxy.ssl_port", 8080);
// profile.setPreference("network.proxy.ftp", "proxy.domain.example.com");
// profile.setPreference("network.proxy.ftp_port", 8080);
// profile.setPreference("network.proxy.socks", "proxy.domain.example.com");
// profile.setPreference("network.proxy.socks_port", 8080); try {
profile.addExtension(file);
profile.setPreference("extensions.firebug.currentVersion", "2.0.4");
profile.setPreference("extensions.firebug.allPagesActivation", "on");
} catch (IOException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
} WebDriver driver = new FirefoxDriver(profile);
return driver; }
public static WebDriver getIEDriver()
{
String IEDriverServer="E:\\IEDriverServer.exe";
System.setProperty("webdriver.ie.driver",IEDriverServer);
WebDriver driver=new InternetExplorerDriver();
return driver;
} }
Selenium webdriver 操作日历控件的更多相关文章
- Selenium webdriver操作日历控件
一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如:使用定位: driver.findElement ...
- Java+selenium 如何操作日历控件
场景:一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 但是,有的日期控件是readonly的 ,比如神 ...
- selenium操作日历控件
日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用js去掉 ...
- selenium webdriver——JS操作日历控件
一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如 但是,有的日期控件是readonly的 比如12 ...
- Selenium webdriver 之select 控件封装,解决onchange问题
使用webdriver的时候,select 控件经常会绑定onchange 事件,在selenium2.09 之前click 方法对onchange 事件有bug,2.09 以后修复了,但是根据经验也 ...
- selenium+Python(Js处理日历控件)
日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用js去掉 ...
- webdriver高级应用- 操作日期控件
1. 通过点击的方式操作日期控件 #encoding=utf-8 from selenium import webdriver import unittest, time, traceback fro ...
- selenium - js日历控件处理
# 13. js处理日历控件 ''' 在web自动化的工程中,日历控制大约分为两种: 1. 可以直接输入日期 2. 通过日历控件选择日期 基本思路: 利用js去掉readonly属性,然后直接输入时间 ...
- PyQt5日历控件及相关操作
1.日历控件QCalendarWidget控件import sys,mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQ ...
随机推荐
- Oracle nvl(),nvl2()函数介绍
NVL函数 Oracle/PLSQL中的一个函数. 格式为: NVL( string1, replace_with) 功能:如果string1为NULL,则NVL函数返回replace_with的值, ...
- CF451A Game With Sticks 水题
Codeforces Round #258 (Div. 2) Game With Sticks A. Game With Sticks time limit per test 1 second mem ...
- HTTP状态301、404、200、304分别表示什么意思
301 (永久移动)请求的网页已永久移动到新位置.服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置.您应使用此代码告诉 Googlebot 某个网页或网站已永久移动 ...
- [译]Probable C# 6.0 features illustrated
原文: http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated ========================= ...
- Vno博客样式分享
不知不觉有一年多没有更新博客了,还是几位园友因为喜欢这套博客样式发了消息,否则我都快忘记自己还有一个博客了,哈哈. 言归正传,这套博客样式是当时闲来无事copy的iOS界喵神的博客Vno,确实很漂亮, ...
- C#深入浅出 C#语法中的重中之重——委托(四)
入行半年多了,委托干什么用的还不知道,真心说不过去了,关键对这东西有点恐惧,主要是被老师吓的,记得我C#专业课老师在讲到委托时,原话是这样的,同学们,委托这个地方是难点,暂时不讲,讲了你也不懂,等你有 ...
- 如何让网页在浏览器标题栏显示自己制作的图标ico
第一步,制作一个尺寸16x16大小的PNG图片,可以用photoshop等图片处理工具来设计,然后保存到本地电脑上,通过ico在线制作或使用IconWorkshop工具制作ICO图标,ico图标命名为 ...
- Linux 动态监听进程shell
背景 前几天在研究线程的时候,看到一句话说java里的线程Thread.run都会在Linux中fork一个的轻量级进程,于是就想验证一下(笔者的机器是Linux的).当时用top命令的时候,进程总是 ...
- redhat 中安装rpm包时遇到异常 “error: Failed dependencies:xinetd is needed by .”
redhat 中安装rpm包时遇到错误 “error: Failed dependencies:xinetd is needed by ....” redhat中安装rpm包时遇到“error: Fa ...
- 剑指Offer 栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...