我有DriverFactory类,它返回Driver by属性。 这是一个扩展BasePage类的RegistrationPage类。和RegistrationTest类在哪里是初始化驱动程序的@BeforeClass方法。 我还有TestListenerClass,我想在onTestFailureMethod中实现在失败的测试用例期间截取屏幕截图。但是有问题把驱动程序放在Screenshot方法中 - 不能从BasePage中获取它(铸造问题)。我也尝试在屏幕截图方法中再次启动它,但启动另一个webdriver是错误的。代码如下所示:
public class DriverFactory {
public enum BrowserType{
FIREFOX("firefox"),
CHROME("chrome"),
IE("internet_explorer"),
SAFARI("safari");
private String value;
BrowserType(String value){
this.value = value;
}
public String getBrowserName(){
return this.value;
}
}
public static WebDriver getDriver(BrowserType type){
WebDriver driver = null;
switch(type){
case FIREFOX:
System.setProperty("webdriver.gecko.driver","D://DemoQA//drivers//geckodriver.exe");
driver = new FirefoxDriver();
break;
case CHROME:
System.setProperty("webdriver.chrome.driver","D://DemoQA//drivers//chromedriver.exe");
driver = new ChromeDriver();
break;
case IE:
driver = new InternetExplorerDriver();
break;
case SAFARI:
driver = new SafariDriver();
break;
default:
System.setProperty("webdriver.chrome.driver","D://DemoQA//drivers//chromedriver.exe");
driver = new ChromeDriver();
break;
}
return driver;
}
public static BrowserType getBrowserTypeByProperty(){
BrowserType type = null;
String browserName = junitx.util.PropertyManager.getProperty("BROWSER");
for(BrowserType bType : BrowserType.values()){
if(bType.getBrowserName().equalsIgnoreCase(browserName)){
type = bType;
System.out.println("BROWSER = " + type.getBrowserName());
}
}
return type;
}
}
public class BasePage {
public WebDriver driver;
public WebDriverWait wait;
public String PAGE_TITLE;
public String PAGE_URL;
public BasePage(WebDriver driver){
this.driver = driver;
wait = new WebDriverWait(driver, 5, 1000);
}
public void loadPage(){
driver.get(getPageURL());
Assert.assertEquals(driver.getTitle(), getPageTitle());
}
....
}
public class RegistrationPage extends BasePage {
@FindBy(className = "piereg_message") WebElement registeredCorrectHeader;
.....
public RegistrationPage(WebDriver driver){
super(driver);
this.PAGE_TITLE = "Registration | Demoqa";
this.PAGE_URL = "http://demoqa.com/registration/";
}
public void setTextFirstNameField(String text){
setTextOnElement(firstNameField, text);
}
....
}
public class TestListener extends TestListenerAdapter {
private WebDriver driver;
@Override
public void onTestFailure(ITestResult testResult){
System.out.println(testResult.getName() + " was failure. \n Throwable " + testResult.getThrowable().getMessage());
driver = ((BasePage)testResult.getInstance()).driver;
Screenshots.captureScreenshot(driver, RandomValuesGenerator.generateRandomString(4));
}
}
@Listeners(TestListener.class)
public class RegistrationTest{
public WebDriver driver;
RegistrationPage registrationPage;
@BeforeClass(alwaysRun = true)
public void setup(){
this.driver = getDriver( DriverFactory.getBrowserTypeByProperty() );
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
registrationPage = PageFactory.initElements(driver, RegistrationPage.class);
}
@Test()
public void testLoginRegistrationPage() throws Exception{
driver.manage().deleteAllCookies();
registrationPage.loadPage();
registrationPage.setTextFirstNameField("Michal");
registrationPage.setTextLastNameField("Kowalewski");
}
问题肯定在这行代码中:
driver = ((BasePage)testResult.getInstance()).driver;
Screenshots.captureScreenshot(driver, RandomValuesGenerator.generateRandomString(4));
异常 - 无法将BasePage强制转换为RegistrationTest - 我想将驱动程序从BasePage转换为onFailure方法
我也试过这样的东西,但是第二次初始化了驱动程序,浏览器再次打开,并拍摄了空截图。
this.driver =
DriverFactory.getDriver(DriverFactory.getBrowserTypeByProperty());
如何将驱动程序置于Failure方法中并且第二次不进行初始化?
此致