selenium自动化学习笔记(Java版)

2 篇文章 0 订阅
2 篇文章 1 订阅

       背景:selenium是python爬虫,同时也是自动化测试使用的一个模块,当然不止有python语言版,本文就是Java版,因为python相关的博客很多了,而我个人更加倾向使用Java到实际的工作项目中。在几年前,尤其是没有做过web相关开发之前,曾经使用过不少python进行过爬虫练习,但都是零零星星地跟着其它博客的例子进行学习,改造成为自己的需求。不过,在经历了webgis开发,部分Java开发甚至安卓移动端自动化(用的是Auto.js,后面的文章有时间会写相关的内容)后,便有了想往PC端浏览器学习扩展的想法,于是就有了这篇文章。

        这个例子是以12306网站进行练习记录一些常见的PC浏览器的HTML domcument文档元素的查找方法和操作动作(模拟交互)如:查找element(根据id,根据class,根据标签名,根据css选择器,根据xpath等等)的相关信息或对象,模拟鼠标,键盘动作,浏览器对象操作方法。在这不对每一个方法单独拆分写,顺序稍微乱些。

使用maven管理包,pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>seleniumApiTest</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>

        <!-- selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.4.0</version>
        </dependency>

    </dependencies>

</project>

Java代码:

package com.seleniumApi.test;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.File;
import java.util.List;
import java.util.Set;

public class apitest {
    public static  void main(String [] args) throws InterruptedException {
        //驱动插件下载链接:https://npm.taobao.org/mirrors/chromedriver,根据自己的chrome浏/览器版本确定下载
        System.setProperty("webdriver.chrome.driver","C:\\driver\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();

        //https://blog.csdn.net/qq_22003641/article/details/79137327?utm_source=app

        //控制浏览器大小方法
        //最大化浏览器
        driver.manage().window().maximize();
        //指定浏览器大小
        //driver.manage().window().setSize(new Dimension(1200,600));
        driver.get("https://www.12306.cn/index/");
        //driver.get("https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc&fs=%E5%B9%BF%E5%B7%9E%E5%8D%97,IZQ&ts=%E6%B7%B1%E5%9C%B3%E5%8C%97,IOQ&date=2020-10-31&flag=N,N,Y");
        //查找元素的八种方法,以12306网址为例

        //id
        WebElement id=driver.findElement(By.id("fromStationText"));
        System.out.println("id:"+id.getTagName());
        //name
        WebElement name=driver.findElement(By.name("from_station"));
        System.out.println("name:"+name.getTagName());
        //class name
        WebElement fromlabel=driver.findElement(By.className("form-label"));
        System.out.println("fromlabel:"+fromlabel.getTagName());
        System.out.println("fromlabel:"+fromlabel.getText());
        //tag name
        WebElement tagname=driver.findElement(By.tagName("label"));
        System.out.println("tagname:"+tagname.getTagName());
        System.out.println("tagname:"+tagname.getText());


        //partial link text

        WebElement partialLinkText=driver.findElement(By.partialLinkText("登录"));
        System.out.println("partialLinkText:"+partialLinkText.getTagName());
        System.out.println("partialLinkText:"+partialLinkText.getText());

        //xpath
        /**参考
         * driver.findElement(By.xpath("//*[@id='kw']"))
         * driver.findElement(By.xpath("//*[@name='wd']"))
         * driver.findElement(By.xpath("//input[@class='s_ipt']"))
         * driver.findElement(By.xpath("/html/body/form/span/input"))
         * driver.findElement(By.xpath("//span[@class='soutu-btn']/input"))
         * driver.findElement(By.xpath("//form[@id='form']/span/input"))
         * driver.findElement(By.xpath("//input[@id='kw' and @name='wd']"))
         */
        WebElement xpath=driver.findElement(By.xpath("/html/body/div/a/i"));

        System.out.println("xpath:"+xpath.getTagName());
        System.out.println("xpath:"+xpath.getText());

        //css selector
        /**
         参考
         driver.findElement(By.cssSelector("#kw")
         driver.findElement(By.cssSelector("[name=wd]")
         driver.findElement(By.cssSelector(".s_ipt")
         driver.findElement(By.cssSelector("html > body > form > span > input")
         driver.findElement(By.cssSelector("span.soutu-btn> input#kw")
         driver.findElement(By.cssSelector("form#form > span > input")
         */
        WebElement cssselector=driver.findElement(By.cssSelector("html>body>div>a>i"));
        System.out.println("cssselector:"+cssselector.getTagName());
        System.out.println("cssselector:"+cssselector.getText());

        Thread.sleep(1000);

        WebElement date_input=driver.findElement(By.id("train_date"));



        date_input.click();


        //WebElement css1=driver.findElement(By.cssSelector(".cal-wrap.cal.cal-cm.cell.so"));

        //System.out.println("css1:"+css1.getText());
        /**
         * 多个选择含有多个子元素Nodelist
         * document.querySelectorAll(".cal-wrap.cal.cal-cm.cell")
         * NodeList []
         * document.querySelectorAll(".cal-wrap")
         * NodeList [div.cal-wrap]0: div.cal-wrapaccessKey: ""align: ""ariaAtomic: nullariaAutoComplete: nullariaBusy: nullariaChecked: nullariaColCount: nullariaColIndex: nullariaColSpan: nullariaCurrent: nullariaDescription: nullariaDisabled: nullariaExpanded: nullariaHasPopup: nullariaHidden: nullariaKeyShortcuts: nullariaLabel: nullariaLevel: nullariaLive: nullariaModal: nullariaMultiLine: nullariaMultiSelectable: nullariaOrientation: nullariaPlaceholder: nullariaPosInSet: nullariaPressed: nullariaReadOnly: nullariaRelevant: nullariaRequired: nullariaRoleDescription: nullariaRowCount: nullariaRowIndex: nullariaRowSpan: nullariaSelected: nullariaSetSize: nullariaSort: nullariaValueMax: nullariaValueMin: nullariaValueNow: nullariaValueText: nullassignedSlot: nullattributeStyleMap: StylePropertyMap {size: 4}attributes: NamedNodeMap {0: class, 1: style, class: class, style: style, length: 2}autocapitalize: ""autofocus: falsebaseURI: "https://www.12306.cn/index/"childElementCount: 3childNodes: NodeList(3) [div.cal, div.cal.cal-right, div.cal-ft]children: HTMLCollection(3) [div.cal, div.cal.cal-right, div.cal-ft]classList: DOMTokenList ["cal-wrap", value: "cal-wrap"]className: "cal-wrap"clientHeight: 211clientLeft: 1clientTop: 1clientWidth: 604contentEditable: "inherit"dataset: DOMStringMap {}dir: ""draggable: falseelementTiming: ""enterKeyHint: ""firstChild: div.calfirstElementChild: div.calhidden: falseid: ""innerHTML: "<div class="cal"><div class="cal-top"><a href="jav"innerText: "日↵一↵二↵三↵四↵五↵六↵国庆↵2↵3↵4↵5↵6↵7↵8↵今天↵10↵11↵12↵13↵14↵15↵16↵17↵18↵19↵20↵21↵22↵23↵24↵25↵26↵27↵28↵29↵30↵31↵日↵一↵二↵三↵四↵五↵六↵1↵2↵3↵4↵5↵6↵7↵8↵9↵10↵11↵12↵13↵14↵15↵16↵17↵18↵19↵20↵21↵22↵23↵24↵25↵26↵27↵28↵29↵30↵今天"inputMode: ""isConnected: trueisContentEditable: falsejQuery110207601351814196637: 213lang: ""lastChild: div.cal-ftlastElementChild: div.cal-ftlocalName: "div"namespaceURI: "http://www.w3.org/1999/xhtml"nextElementSibling: div#userdata_elnextSibling: div#userdata_elnodeName: "DIV"nodeType: 1nodeValue: nullnonce: ""offsetHeight: 213offsetLeft: 205offsetParent: bodyoffsetTop: 382offsetWidth: 606onabort: nullonanimationend: nullonanimationiteration: nullonanimationstart: nullonauxclick: nullonbeforecopy: nullonbeforecut: nullonbeforepaste: nullonbeforexrselect: nullonblur: nulloncancel: nulloncanplay: nulloncanplaythrough: nullonchange: nullonclick: nullonclose: nulloncontextmenu: nulloncopy: nulloncuechange: nulloncut: nullondblclick: nullondrag: nullondragend: nullondragenter: nullondragleave: nullondragover: nullondragstart: nullondrop: nullondurationchange: nullonemptied: nullonended: nullonerror: nullonfocus: nullonformdata: nullonfullscreenchange: nullonfullscreenerror: nullongotpointercapture: nulloninput: nulloninvalid: nullonkeydown: nullonkeypress: nullonkeyup: nullonload: nullonloadeddata: nullonloadedmetadata: nullonloadstart: nullonlostpointercapture: nullonmousedown: nullonmouseenter: nullonmouseleave: nullonmousemove: nullonmouseout: nullonmouseover: nullonmouseup: nullonmousewheel: nullonpaste: nullonpause: nullonplay: nullonplaying: nullonpointercancel: nullonpointerdown: nullonpointerenter: nullonpointerleave: nullonpointermove: nullonpointerout: nullonpointerover: nullonpointerrawupdate: nullonpointerup: nullonprogress: nullonratechange: nullonreset: nullonresize: nullonscroll: nullonsearch: nullonseeked: nullonseeking: nullonselect: nullonselectionchange: nullonselectstart: nullonstalled: nullonsubmit: nullonsuspend: nullontimeupdate: nullontoggle: nullontransitionend: nullonvolumechange: nullonwaiting: nullonwebkitanimationend: nullonwebkitanimationiteration: nullonwebkitanimationstart: nullonwebkitfullscreenchange: nullonwebkitfullscreenerror: nullonwebkittransitionend: nullonwheel: nullouterHTML: "<div class="cal-wrap" style="z-index: 30000; posit"outerText: "日↵一↵二↵三↵四↵五↵六↵国庆↵2↵3↵4↵5↵6↵7↵8↵今天↵10↵11↵12↵13↵14↵15↵16↵17↵18↵19↵20↵21↵22↵23↵24↵25↵26↵27↵28↵29↵30↵31↵日↵一↵二↵三↵四↵五↵六↵1↵2↵3↵4↵5↵6↵7↵8↵9↵10↵11↵12↵13↵14↵15↵16↵17↵18↵19↵20↵21↵22↵23↵24↵25↵26↵27↵28↵29↵30↵今天"ownerDocument: documentparentElement: bodyparentNode: bodypart: DOMTokenList [value: ""]prefix: nullpreviousElementSibling: scriptpreviousSibling: textscrollHeight: 211scrollLeft: 0scrollTop: 0scrollWidth: 605shadowRoot: nullslot: ""spellcheck: truestyle: CSSStyleDeclaration {0: "z-index", 1: "position", 2: "left", 3: "top", alignContent: "", alignItems: "", alignSelf: "", alignmentBaseline: "", all: "", …}tabIndex: -1tagName: "DIV"textContent: "一月二月三月四月五月六月七月八月九月十月十一月十二月2016←→×日一二三四五六国庆2345678今天101112131415161718192021222324252627282930312016←→×一月二月三月四月五月六月七月八月九月十月十一月十二月日一二三四五六123456789101112131415161718192021222324252627282930今天"title: ""translate: true__proto__: HTMLDivElement(...)length: 1__proto__: NodeListentries: ƒ entries()forEach: ƒ forEach()item: ƒ item()keys: ƒ keys()length: (...)values: ƒ values()constructor: ƒ NodeList()Symbol(Symbol.iterator): ƒ values()Symbol(Symbol.toStringTag): "NodeList"get length: ƒ length()__proto__: Object
         * document.querySelectorAll(".cal-wrap.cal")
         * NodeList []
         * document.querySelectorAll(".cal-wrap")
         * NodeList [div.cal-wrap]0: div.cal-wrapaccessKey: ""align: ""ariaAtomic: nullariaAutoComplete: nullariaBusy: nullariaChecked: nullariaColCount: nullariaColIndex: nullariaColSpan: nullariaCurrent: nullariaDescription: nullariaDisabled: nullariaExpanded: nullariaHasPopup: nullariaHidden: nullariaKeyShortcuts: nullariaLabel: nullariaLevel: nullariaLive: nullariaModal: nullariaMultiLine: nullariaMultiSelectable: nullariaOrientation: nullariaPlaceholder: nullariaPosInSet: nullariaPressed: nullariaReadOnly: nullariaRelevant: nullariaRequired: nullariaRoleDescription: nullariaRowCount: nullariaRowIndex: nullariaRowSpan: nullariaSelected: nullariaSetSize: nullariaSort: nullariaValueMax: nullariaValueMin: nullariaValueNow: nullariaValueText: nullassignedSlot: nullattributeStyleMap: StylePropertyMap {size: 4}attributes: NamedNodeMap {0: class, 1: style, class: class, style: style, length: 2}autocapitalize: ""autofocus: falsebaseURI: "https://www.12306.cn/index/"childElementCount: 3childNodes: NodeList(3) [div.cal, div.cal.cal-right, div.cal-ft]children: HTMLCollection(3) [div.cal, div.cal.cal-right, div.cal-ft]classList: DOMTokenList ["cal-wrap", value: "cal-wrap"]className: "cal-wrap"clientHeight: 211clientLeft: 1clientTop: 1clientWidth: 604contentEditable: "inherit"dataset: DOMStringMap {}dir: ""draggable: falseelementTiming: ""enterKeyHint: ""firstChild: div.calfirstElementChild: div.calhidden: falseid: ""innerHTML: "<div class="cal"><div class="cal-top"><a href="jav"innerText: "日↵一↵二↵三↵四↵五↵六↵国庆↵2↵3↵4↵5↵6↵7↵8↵今天↵10↵11↵12↵13↵14↵15↵16↵17↵18↵19↵20↵21↵22↵23↵24↵25↵26↵27↵28↵29↵30↵31↵日↵一↵二↵三↵四↵五↵六↵1↵2↵3↵4↵5↵6↵7↵8↵9↵10↵11↵12↵13↵14↵15↵16↵17↵18↵19↵20↵21↵22↵23↵24↵25↵26↵27↵28↵29↵30↵今天"inputMode: ""isConnected: trueisContentEditable: falsejQuery110207601351814196637: 213lang: ""lastChild: div.cal-ftlastElementChild: div.cal-ftlocalName: "div"namespaceURI: "http://www.w3.org/1999/xhtml"nextElementSibling: div#userdata_elnextSibling: div#userdata_elnodeName: "DIV"nodeType: 1nodeValue: nullnonce: ""offsetHeight: 213offsetLeft: 205offsetParent: bodyoffsetTop: 382offsetWidth: 606onabort: nullonanimationend: nullonanimationiteration: nullonanimationstart: nullonauxclick: nullonbeforecopy: nullonbeforecut: nullonbeforepaste: nullonbeforexrselect: nullonblur: nulloncancel: nulloncanplay: nulloncanplaythrough: nullonchange: nullonclick: nullonclose: nulloncontextmenu: nulloncopy: nulloncuechange: nulloncut: nullondblclick: nullondrag: nullondragend: nullondragenter: nullondragleave: nullondragover: nullondragstart: nullondrop: nullondurationchange: nullonemptied: nullonended: nullonerror: nullonfocus: nullonformdata: nullonfullscreenchange: nullonfullscreenerror: nullongotpointercapture: nulloninput: nulloninvalid: nullonkeydown: nullonkeypress: nullonkeyup: nullonload: nullonloadeddata: nullonloadedmetadata: nullonloadstart: nullonlostpointercapture: nullonmousedown: nullonmouseenter: nullonmouseleave: nullonmousemove: nullonmouseout: nullonmouseover: nullonmouseup: nullonmousewheel: nullonpaste: nullonpause: nullonplay: nullonplaying: nullonpointercancel: nullonpointerdown: nullonpointerenter: nullonpointerleave: nullonpointermove: nullonpointerout: nullonpointerover: nullonpointerrawupdate: nullonpointerup: nullonprogress: nullonratechange: nullonreset: nullonresize: nullonscroll: nullonsearch: nullonseeked: nullonseeking: nullonselect: nullonselectionchange: nullonselectstart: nullonstalled: nullonsubmit: nullonsuspend: nullontimeupdate: nullontoggle: nullontransitionend: nullonvolumechange: nullonwaiting: nullonwebkitanimationend: nullonwebkitanimationiteration: nullonwebkitanimationstart: nullonwebkitfullscreenchange: nullonwebkitfullscreenerror: nullonwebkittransitionend: nullonwheel: nullouterHTML: "<div class="cal-wrap" style="z-index: 30000; posit"outerText: "日↵一↵二↵三↵四↵五↵六↵国庆↵2↵3↵4↵5↵6↵7↵8↵今天↵10↵11↵12↵13↵14↵15↵16↵17↵18↵19↵20↵21↵22↵23↵24↵25↵26↵27↵28↵29↵30↵31↵日↵一↵二↵三↵四↵五↵六↵1↵2↵3↵4↵5↵6↵7↵8↵9↵10↵11↵12↵13↵14↵15↵16↵17↵18↵19↵20↵21↵22↵23↵24↵25↵26↵27↵28↵29↵30↵今天"ownerDocument: documentparentElement: bodyparentNode: bodypart: DOMTokenList [value: ""]prefix: nullpreviousElementSibling: scriptpreviousSibling: textscrollHeight: 211scrollLeft: 0scrollTop: 0scrollWidth: 605shadowRoot: nullslot: ""spellcheck: truestyle: CSSStyleDeclaration {0: "z-index", 1: "position", 2: "left", 3: "top", alignContent: "", alignItems: "", alignSelf: "", alignmentBaseline: "", all: "", …}tabIndex: -1tagName: "DIV"textContent: "一月二月三月四月五月六月七月八月九月十月十一月十二月2016←→×日一二三四五六国庆2345678今天101112131415161718192021222324252627282930312016←→×一月二月三月四月五月六月七月八月九月十月十一月十二月日一二三四五六123456789101112131415161718192021222324252627282930今天"title: ""translate: true__proto__: HTMLDivElement(...)length: 1__proto__: NodeList
         * document.querySelectorAll(".cal-wrap")[0].firstElementChild.lastElementChild.querySelectorAll(".cell")
         * NodeList(31) [div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell, div.cell]
         */
        //List<WebElement> css1=driver.findElements(By.cssSelector(".cal-wrap.cal.cal-cm.cell"));
        List<WebElement> css1=driver.findElements(By.cssSelector(".cell"));
        System.out.println("cssselector1:"+css1.size());
        for(WebElement css : css1 ){
            System.out.println("css:"+css.getLocation());
            System.out.println("css:"+css.getTagName());
            System.out.println("css:"+css.getText());
        }
        Thread.sleep(5000);
        //link text
        WebElement linktext=driver.findElement(By.linkText("登录"));
        System.out.println("linktext:"+linktext.getTagName());
        System.out.println("linktext:"+linktext.getText());
        linktext.click();
        Thread.sleep(1000);

        //控制浏览器前进后退、刷新等操作
        //回退
        driver.navigate().back();
        Thread.sleep(1500);
        //前进
        driver.navigate().forward();
        Thread.sleep(1500);

        //回退
        driver.navigate().back();
        Thread.sleep(1500);

        //刷新页面
        driver.navigate().refresh();
        Thread.sleep(1500);

        //WebElement常用的方法

        WebElement searchinput=driver.findElement(By.className("search-input"));

        //获取当前窗口句柄
        String current_windows=driver.getWindowHandle();

        //模拟鼠标方法
        //除了click外,还有右击contextClick()、鼠标点击并控制clickAndHold()、
        //双击doubleClick()、拖动dragAndDrop()、释放鼠标release()、perform()执行所有Actions中存储的行为
        Actions actions=new Actions(driver);

        actions.contextClick(searchinput).perform();
        System.out.println("contextClick");
        Thread.sleep(5000);

        actions.doubleClick(searchinput).perform();
        System.out.println("doubleClick");
        Thread.sleep(5000);

        WebElement xinxi= driver.findElement(By.className("menu-nav-hd"));

        actions.clickAndHold(xinxi).perform();
        System.out.println("clickAndHold");
        Thread.sleep(5000);

        File file=((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);

        try{
            FileUtils.copyFile(file,new File("d://Screenshot.png"));
        }catch (Exception e){
            e.printStackTrace();
        }


        actions.dragAndDrop(xinxi,searchinput).perform();
        System.out.println("dragAndDrop");
        Thread.sleep(1000);

        actions.release();
        System.out.println("release");
        Thread.sleep(5000);


        //模拟键盘方法

        //点击进入搜索框
        searchinput.click();

        Thread.sleep(1000);
        //输入文字
        searchinput.sendKeys("退票跑");

        Thread.sleep(1000);

        //回退键
        searchinput.sendKeys(Keys.BACK_SPACE);
        Thread.sleep(1000);

        //快捷键 Ctrl+a、x、v
        searchinput.sendKeys(Keys.CONTROL,"a");
        Thread.sleep(1000);

        searchinput.sendKeys(Keys.CONTROL,"x");
        Thread.sleep(1000);

        searchinput.sendKeys(Keys.CONTROL,"v");
        Thread.sleep(1000);


        //使用Enter键代替submit方法
        searchinput.sendKeys(Keys.ENTER);
        Thread.sleep(5000);

        //submit提交
        //searchinput.submit();

        //窗口切换
        //获取所有窗口句柄
        Set<String> all_windows=driver.getWindowHandles();

        //显示等待,针对某个元素等待
        //driver: 浏览器驱动。 10: 最长超时时间, 默认以秒为单位。 1: 检测的的间隔(步长) 时间, 默认为 0.5s。
        WebDriverWait wait=new WebDriverWait(driver,10,1);

        //
        for (String eachwindows : all_windows){
            if (!eachwindows.equals(current_windows)){
                System.out.println("切换到之前的页面(12306首页)");
                //切换到之前的页面(12306首页)
                driver.switchTo().window(eachwindows);
                Thread.sleep(8000);
                //关闭当前窗口
                driver.close();
                driver.switchTo().window(current_windows);
                //Thread.sleep(2000);
                wait.until(new ExpectedCondition<WebElement>() {
                    @Override
                    public WebElement apply(WebDriver driver1){
                        System.out.println("wait.until");
                        return driver1.findElement(By.id("fromStationText"));
                    }
                });
                break;
            }
        }


        //出发城市

        WebElement fromStation =driver.findElement(By.id("fromStationText"));
        //清除输入框的内容
        fromStation.clear();

        Thread.sleep(1000);

        //点击输入框
        fromStation.click();

        Thread.sleep(1000);

        //输入框输入关键字
        fromStation.sendKeys("广州南");

        Thread.sleep(1000);

        WebElement citylineover1=driver.findElement(By.className("citylineover"));

        citylineover1.click();

        // 到达城市
        WebElement toStation=driver.findElement(By.id("toStationText"));

        toStation.clear();

        Thread.sleep(1000);

        toStation.click();

        Thread.sleep(1000);

        toStation.sendKeys("深圳北");

        Thread.sleep(1000);

        WebElement citylineover2=driver.findElement(By.className("citylineover"));

        citylineover2.click();

        Thread.sleep(1000);

        //toStation.submit();
        //日期
        WebElement train_date=driver.findElement(By.id("train_date"));

        //点击所选的日期,假如是这个月的31日
        train_date.click();

        Thread.sleep(1000);

        //日期控件
        WebElement cal_cm=driver.findElement(By.className("cal-cm"));

        List<WebElement> cells = cal_cm.findElements(By.className("cell"));
        //选择31号
        for (WebElement cell : cells){
            WebElement so=cell.findElement(By.className("so"));
            String name1=so.getText();
            if ("31".equals(name1)){
                System.out.println("日期:"+name1);
                cell.click();
                Thread.sleep(1000);
                break;
            }
        }


        Thread.sleep(1000);

        String current_Handle= driver.getWindowHandle();

        //查询按钮
        WebElement search_one=driver.findElement(By.id("search_one"));

        search_one.click();

        Thread.sleep(1000);

        //下拉框选择方法

        Set<String> all_Handle= driver.getWindowHandles();
        //切换到第二个窗口
        for(String handle : all_Handle){
            if (!handle.equals(current_Handle)){
                driver.switchTo().window(handle);
                Thread.sleep(1000);
                System.out.println("currentURL:"+driver.getCurrentUrl());
                break;
            }
        }



        //WebElement selectsmall=driver.findElement(By.className("select-small"));
        WebElement selectsmall=driver.findElement(By.id("cc_start_time"));
        //WebElement selectsmall=driver.findElement(By.cssSelector(".pos-top.select-small"));

        Select select=new Select(selectsmall);

        //选择12-18点之间的
        select.selectByValue("12001800");
        Thread.sleep(2000);
        System.out.println("选择12-18点之间的");

        select.selectByIndex(0);
        Thread.sleep(2000);
        System.out.println("选择0-24点之间的");

        select.selectByIndex(1);
        Thread.sleep(2000);
        System.out.println("选择0-6点之间的");

        select.selectByIndex(2);
        Thread.sleep(2000);
        System.out.println("选择6-12点之间的");

        select.selectByIndex(3);
        Thread.sleep(2000);
        System.out.println("选择12-18点之间的");

        select.selectByIndex(4);
        Thread.sleep(2000);
        System.out.println("选择18-24点之间的");

        //cookie方法
        //获取cookie
        Set<Cookie> cookies=driver.manage().getCookies();
        System.out.println("cookies:"+cookies.toString());

        //删除cookie
        for(Cookie cookie :cookies){
            if ("_jc_save_fromDate".equals(cookie.getName())){
                driver.manage().deleteCookie(cookie);
                System.out.println("cookie:"+cookie.getName());
                break;
            }
        }

        Set<Cookie> cookies1=driver.manage().getCookies();
        System.out.println("cookies:"+cookies1.toString());

        //设置(添加)cookie
        Cookie cookie1=new Cookie("_jc_save_fromDate","2020-10-20");
        //Cookie cookie2=new Cookie("value","2020-10-20");

        driver.manage().addCookie(cookie1);
        //driver.manage().addCookie(cookie2);

        Set<Cookie> cookies2=driver.manage().getCookies();
        System.out.println("cookies:"+cookies2.toString());

        //截屏窗口
        /**File file=((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);

        try{
            FileUtils.copyFile(file,new File("d://Screenshot.png"));
        }catch (Exception e){
            e.printStackTrace();
        }
         */

        //执行JavaScript脚本
        String javascript="alert('执行了JavaScript代码!')";

        ((JavascriptExecutor)driver).executeAsyncScript(javascript);

        System.out.println("执行了JavaScript代码");

        Thread.sleep(2000);

        //警告框处理 警告框这里还有点问题,后续继续研究
        /**
         * getText(): 返回 alert/confirm/prompt 中的文字信息。
         * accept(): 接受现有警告框。
         * dismiss(): 解散现有警告框。
         * sendKeys(keysToSend): 发送文本至警告框。
         * keysToSend: 将文本发送至警告框
         */
        //driver.switchTo().alert().accept();

        Alert alert= driver.switchTo().alert();

        alert.accept();
        System.out.println("accept");
        Thread.sleep(1000);

        //alert.getText();
        System.out.println("getText:"+alert.getText());
        Thread.sleep(1000);

        alert.sendKeys("小星星");
        System.out.println("getText");
        Thread.sleep(1000);

        alert.dismiss();
        System.out.println("dismiss");
        Thread.sleep(1000);

    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
课程介绍你是否在寻找机会进入自动化测试领域? 你是否渴望学习selenium webdriver + Java以及最新的框架和技术进行web自动化测试? 你是否感兴趣学习Selenium如何用在你现有的项目里的? 这门课带你从Selenium搭建环境开始讲起,然后学习selenium,TestNG, logback, maven, jenkins。 我们假设学员没有任何自动化经验,来设计的这套课程。每个课题都从最基础的开始讲起。Selenium相关的该覆盖的课题都覆盖了。 例子都是来自于真实的web应用项目,帮助你理解不同的组件怎么用上自动化,这将展示给你一个行业层面的框架,增加自信心。 全网没有其他课程像这门课涵盖到如此之深的细节。 您将会学到什么 学完课程以后,你将拥有完整的Selenium Webdriver知识 你将具备从头开始设计Page Object、Page Factory、DATADRIVEN等搭建自动化框架的能力 用100多个实例对Selenium现实场景应用进行深入理解 全面了解TestNG, Maven, Jenkins, HTML报告,多浏览器并行测试 了解数据库测试和使用Selenium进行性能测试 你将彻底了解testNG框架 你从网上随便选择一个网站,都可以实现自动化,用所有可能的测试用例进行自动化测试 将提高你的编码技能,以编写最优化的自动化测试用例代码 你基本可以搞定任何Selenium面试,并能从设计阶段开始领导整个Selenium自动化项目 你应该能够使用应用程序的GUI来验证数据完整性 你将能够创建漂亮的报告来打动客户或领导 更深入地理解自动化指南和代码质量标准 会附带一个练习网站,可以用上所有可用的WebDriver功能,实现自动化 【适合人群】 软件手动测试人员想转为自动化测试的人员 自动化软件测试人员想加强专业技能的 刚毕业学生想从事软件行业 QA 组长或项目经理 【课程优势】 学完课程以后,你将拥有完整的Selenium Webdriver知识 【讲师介绍】 资质介绍: 12年以上软件测试工作经验,其中7年以上自动化测试开发经验 新书“Python3+Selenium3自动化测试项目实战”作者

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兰小莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值