zoukankan      html  css  js  c++  java
  • cucumber+selenium

    工程结构

    pom

    <?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>com.test</groupId>
        <artifactId>mycucumber</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        <repositories>
            <repository>
                <!-- Maven 自带的中央仓库使用的Id为central 如果其他的仓库声明也是用该Id
                就会覆盖中央仓库的配置 -->
                <id>mvnrepository</id>
                <name>mvnrepository</name>
                <url>http://www.mvnrepository.com/</url>
                <layout>default</layout>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
    
        </repositories>
    
        <dependencies>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-core</artifactId>
                <version>4.2.3</version>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-testng</artifactId>
                <version>4.2.3</version>
            </dependency>
    
            <!-- 加入reportNG依赖,代替testNG测试报告 -->
            <dependency>
                <groupId>org.uncommons</groupId>
                <artifactId>reportng</artifactId>
                <version>1.1.4</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>io.cucmber</groupId>
                        <artifactId>cucmber-testng</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- 加入selenium做webUI测试,选用selenium2 -->
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>2.53.1</version>
            </dependency>
            <!-- 依赖Guice -->
            <dependency>
                <groupId>com.google.inject</groupId>
                <artifactId>guice</artifactId>
                <version>3.0</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <!-- 加入maven-surefire-plugin插件用来使用maven执行用例,
                其中suiteXmlFile配置的就是testNG用例执行文件的地址 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.21.0</version>
                    <configuration>
                        <suiteXmlFiles>
                            <suiteXmlFile>src/test/java/cucumber/testng/testng.xml</suiteXmlFile>
                        </suiteXmlFiles>
                        <properties>
                            <property>
                                <name>usedefaultlisteners</name>
                                <value>false</value>
                            </property>
                            <property>
                                <name>listener</name>
                                <value>org.uncommons.reportng.HTMLReporter</value>
                            </property>
                        </properties>
                        <!-- 加入编码设置,否则生成的报告会中文乱码 -->
                        <argLine>-Dfile.encoding=UTF-8</argLine>
                    </configuration>
                </plugin>
                <!-- 添加插件,添加ReportNg的监听器,修改最后的TestNg的报告 -->
            </plugins>
        </build>
    
    </project>
    

    testng

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Baidu Search Demo Suite" verbose="0" parallel="tests" thread-count="2">
        <test name="Web Scenarios Test" enabled="true" thread-count="2">
            <!--<groups>-->
                <!--<run>-->
                    <!--<include name="@BaiduSearch"/>-->
                <!--</run>-->
            <!--</groups>-->
            <classes>
                <class name="common.core.Runner"/>
            </classes>
        </test>
    </suite>
    

    common.core

    package common.core;
    
    import common.myenum.DriverType;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    
    public class BrowserDriver {
    
        private WebDriver driver;
    
        public WebDriver getDriver(String browerName) {
            switch (DriverType.getDriverType(browerName)) {
                case chrome:
                    System.setProperty("webdriver.chrome.bin", "D:\Program Files\ChromeGAE\Chrome\chrome.exe");
                    System.setProperty("webdriver.chrome.driver", "D:\Program Files\ChromeGAE\Chrome\chromedriver.exe");
                    driver = new ChromeDriver();
                    break;
                case firefox:
                    driver = new FirefoxDriver();
                    break;
                case ie:
                    driver = new InternetExplorerDriver();
                    break;
            }
            return driver;
        }
    }
    
    package common.core;
    
    import cucumber.api.CucumberOptions;
    import cucumber.api.testng.AbstractTestNGCucumberTests;
    
    @CucumberOptions(
            features = "src/test/resource/features/BaiduSearch.feature",
            format = {
                    "pretty",
                    "html:target/site/cucumber-pretty",
                    "rerun:target/site/return.text",
                    "json:target/cucumberjson.json"
            },
            tags = {"@BaiduSearch"},
            glue = {"cucumber.steps"}
    )
    public class Runner extends AbstractTestNGCucumberTests {
    }
    

    common.myenum

    package common.myenum;
    
    public enum DriverType {
        chrome, ie, firefox;
    
        public static DriverType getDriverType(String driverType) {
            return valueOf(driverType.toLowerCase());
        }
    }
    

    cucumber.pages

    package cucumber.pages.baidu;
    
    
    import cucumber.pages.BasePage;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.FindBy;
    
    public class BaiduSearchPage extends BasePage {
        //private final String searchBtn = "xpath=//input[@id='su']";
        //private final String searchText = "xpath=//input[@id='kw']";
    
        @FindBy(xpath = "//*[@id="kw"]")
        private WebElement searchText;
    
        @FindBy(xpath = "//*[@id="su"]")
        private WebElement searchBtn;
    
        @FindBy(xpath = "//div[@id="1"]/h3/a")
        private WebElement firstLink;
    
        @FindBy(xpath = "//div[@id="2"]/h3/a")
        private WebElement secondLink;
    
        public BaiduSearchPage(WebDriver driver) {
            super(driver);
        }
    
        public void searchByText(String text) throws InterruptedException {
            this.sendString(searchText, text);
            this.click(searchBtn);
            Thread.sleep(3000);
        }
    
        public boolean verifyFirstLinkTitle(String title) throws InterruptedException {
            System.out.println(this.driver.getWindowHandle());
            return this.firstLink.getText().contains(title);
    
        }
    
        public boolean verifySecondLinkTitle(String title) {
            return this.secondLink.getText().contains(title);
        }
    }
    
    package cucumber.pages;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    
    public class BasePage {
    
        protected WebDriver driver;
        private final int timeOut = 10;//等待时间
    
        public BasePage(WebDriver driver) {
            this.driver = driver;
            this.driver.manage().window().maximize();
        }
    
        protected void sendString(WebElement element, String s) {
            new WebDriverWait(driver, timeOut).until(ExpectedConditions.visibilityOf(element));// 加入显式等待
            element.clear();// 清空输入框
            element.sendKeys(s);// 输入数据
        }
    
        protected void click(WebElement element) {
            new WebDriverWait(driver, timeOut).until(ExpectedConditions.visibilityOf(element));
            element.click();
        }
    }
    

    cucumber.steps

    package cucumber.steps;
    
    import common.core.BrowserDriver;
    import cucumber.api.java.en.Given;
    import cucumber.api.java.en.Then;
    import cucumber.api.java.en.When;
    import cucumber.pages.baidu.BaiduSearchPage;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.support.PageFactory;
    
    
    public class MySteps {
        private WebDriver driver;
        private BaiduSearchPage baiduSearchPage;
    
        public MySteps() {
    
        }
    
        @Given("^I start "([^"]*)"$")
        public void startBrowser(String browerName) throws Throwable {
            this.driver = new BrowserDriver().getDriver(browerName);
            this.baiduSearchPage = new BaiduSearchPage(this.driver);
        }
    
        @When("^I search "([^"]*)" at baidu$")
        public void searchText(String text) throws Throwable {
            baiduSearchPage = PageFactory.initElements(driver, BaiduSearchPage.class);
            this.driver.get("http://www.baidu.com");
            this.baiduSearchPage.searchByText(text);
        }
    
        @Then("^The result should have "([^"]*)" in the title of the "([^"]*)" link$")
        public void theResultShouldHaveInTheTitleOfTheLink(String text, String ordinal) throws Throwable {
            if (ordinal.equalsIgnoreCase("first")) {
                assert this.baiduSearchPage.verifyFirstLinkTitle(text);
            } else if (ordinal.equalsIgnoreCase("second")) {
                assert this.baiduSearchPage.verifySecondLinkTitle(text);
            } else {
                throw new Exception("Error:ordinal is not available.");
            }
            this.driver.close();
        }
    }
    

    resource.features

    Feature:  Baidu Search
    
      @BaiduSearch
      Scenario Outline: Search text
        Given I start "<browser>"
        When I search "<text>" at baidu
        Then The result should have "<title>" in the title of the "<ordinal>" link
    
        Examples:
          | browser | text | title | ordinal |
          | chrome  | xxx1 | CSDN  | first   |
          | chrome  | xxx2 | CSDN  | second  |
    
  • 相关阅读:
    网络安全分析
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1540 机器
    java实现 洛谷 P1540 机器
  • 原文地址:https://www.cnblogs.com/liehen2046/p/11222923.html
Copyright © 2011-2022 走看看