任何人可以幫助我與我的問題:如何從測試的類中刪除實例「驅動程序」
如何從BaseTest
類中刪除實例driver
但在這裏,在兒童類使用它?
我使用POM通過Selenium + TestNG + Maven構建測試框架。
比如我有未來BaseTest
類:
package com.google.test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
public class BaseTest {
protected WebDriver driver;
protected WebDriver getDriver() {
return driver;
}
@BeforeTest
public void setUp() {
if (driver == null) {
initializeDriver();
setPropertyWindow();
setPropertyTimeOut();
}
}
@AfterTest
public void tearDown() {
delay(3000);
if (driver != null) {
driver.close();
}
}
public void initializeDriver() {
DesiredCapabilities capabilitiesFirefox = new DesiredCapabilities();
capabilitiesFirefox.setCapability("marionette", true);
System.setProperty("webdriver.gecko.driver", "e:\\Autotests\\TestGoogle\\src\\test\\resources\\Geckodriver 0.16.1\\geckodriver.exe");
driver = new FirefoxDriver(capabilitiesFirefox);
}
public void setPropertyWindow() {
driver.manage().window().maximize();
}
public void setPropertyTimeOut() {
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
public void delay (long millisec) {
try {
Thread.sleep(millisec);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
這個問題已經出現becouse我有BasePage
類多了一個實例驅動程序:
package com.google.pages;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class BasePage {
public static final String BASE_URL = "https://www.google.com/ncr";
protected WebDriver driver;
protected static final int TIME_OUT = 10;
protected WebDriver getDriver() {
return driver;
}
public BasePage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
public WebElement assertThat(ExpectedCondition<WebElement> condition) {
return (new WebDriverWait(driver, TIME_OUT)).until(condition);
}
}
我想從BaseTest
類中刪除實例driver
但離開它在類BasePage
。因此,我只在項目中留下driver
的一個實例。我的測試只知道測試的邏輯,但不知道具體的實現(例如在當前時間是硒,但將來可能會有硒化或其他工具)。
也許我必須創建新的類Webdriver和內部創建靜態實例driver
和方法getter()我可以使用?或者另一種方式?我不明白在這種情況下哪種方式更好,更重要的是使用點OOP原則。
完整的項目,你可以在這裏找到 - TestGoogle on GitHub
謝謝。
不,不,不。你如何想象它 - 從'Pages'繼承'Tests'?邏輯在哪裏?頁面對象模式的本質 - 分離邏輯。這個變體對於物理實現問題是非常容易的(簡單的語法和不再),但我試圖解決邏輯實現這個問題。 – PrinceOFF