作者:HenryJuliju | 来源:互联网 | 2023-09-25 18:50
工程结构
![技术分享图片](https://img7.php1.cn/3cdc5/c7bc/711/e3426f61df564ff6.jpeg)
pom
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">
4.0.0
com.test
mycucumber
1.0-SNAPSHOT
UTF-8
mvnrepository
mvnrepository
http://www.mvnrepository.com/
default
true
false
info.cukes
cucumber-java
1.2.4
test
info.cukes
cucumber-testng
1.2.4
org.uncommons
reportng
1.1.4
test
org.cucmber.testng
cucmber.testng
org.seleniumhq.selenium
selenium-java
2.53.1
com.google.inject
guice
3.0
test
org.projectlombok
lombok
true
org.apache.maven.plugins
maven-surefire-plugin
2.21.0
src/test/java/cucumber/testng/testng.xml
usedefaultlisteners
false
listener
org.uncommons.reportng.HTMLReporter
-Dfile.encoding=UTF-8
testng
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 ""
When I search "" at baidu
Then The result should have "" in the title of the "" link
Examples:
| browser | text | title | ordinal |
| chrome | xxx1 | CSDN | first |
| chrome | xxx2 | CSDN | second |