多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

如何使用Selenium webdriver操作日历控件-自动化测试

更新时间:2022-05-05 09:30:16 作者:多测师 浏览:235

  一般的日期控件都是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');") ;

如何使用Selenium webdriver操作日历控件-自动化测试

  方案二:采用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操作日历控件,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部