这里有3周的Java经验。 我有这两个类 - AppTest和AppTest2,我在两个类中都有相同的代码:
这是我的代码:
public class Apptest/AppTest2 {
public WebDriver driver;
public WebDriverWait wait;
@DataProvider(name = "dataProvider")
public Object[][] setUp() throws Exception {
File firefoxPath = new File(System.getProperty("lmportal.deploy.firefox.path", "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"));
FirefoxBinary ffox = new FirefoxBinary(firefoxPath);
ffox.setEnvironmentProperty("DISPLAY", ":20");
driver = new FirefoxDriver(ffox, null);
wait = new WebDriverWait(driver, timeoutInSeconds );
Object[][] data = new Object[1][2];
data[0][0] = driver;
data[0][1] = wait;
return data;
}
@Parameters({ "driver", "wait" })
@Test(dataProvider = "dataProvider")
public void twoUsersSignUp(WebDriver driver, WebDriverWait wait) throws InterruptedException{
//test here
}
}
如何将此代码取出(setUp()),使其成为一个类,然后将这些变量传递给下一个void“twoUsersSignUp”
编辑:我不是在寻找自动解决方案,我只想重构它,所以我在这两个类中都没有相同的代码EDIT2:在我实现了接受的答案的解决方案之后,我现在遇到了将变量“driver”传递给第一个类中的下一个方法的问题:
@AfterClass
public void quit () {
driver.quit();
}
我该怎么做?
EDIT3:这是@AfterClass解决方案:
@SuppressWarnings("deprecation")
@Configuration
@AfterClass
public static void quit (@Optional WebDriver driver) {
driver.quit();
}
EDIT4:实际上EDIT3不起作用,只是隐藏了Eclipse中的错误。我仍然无法访问“驱动程序”:(
EDIT5:我决定我不需要在AfterClass TestNG注释中使用它,所以我删除了所有不必要的东西,它现在看起来像这样:
public static void quit (WebDriver driver) {
driver.quit();
}
并且变量已经这样声明:
public static WebDriver driver;
但仍然无法正常工作
EDIT6:通过实际调用测试代码中的方法来修复此问题。之前我没有必要调用它,因为testng.xml已经调用它,但在我删除了@AfterTest注释后,它被排除在那里!
答案 0 :(得分:2)
您无法将方法转换为类,但您可以将方法移动到Apptest
和AppTest2
共享它的位置:创建基类,然后创建{ {1}}和Apptest
个类扩展它。
AppTest2
现在不需要重复public abstract class AbstractAppTest {
public WebDriver driver;
public WebDriverWait wait;
@DataProvider(name = "dataProvider")
public Object[][] setUp() throws Exception {
File firefoxPath = new File(System.getProperty("lmportal.deploy.firefox.path", "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"));
FirefoxBinary ffox = new FirefoxBinary(firefoxPath);
ffox.setEnvironmentProperty("DISPLAY", ":20");
driver = new FirefoxDriver(ffox, null);
wait = new WebDriverWait(driver, timeoutInSeconds );
Object[][] data = new Object[1][2];
data[0][0] = driver;
data[0][1] = wait;
twoUsersSignUp(data);
return data;
}
public abstract void twoUsersSignUp(@Optional Object[][] data) throws InterruptedException;
}
public class Apptest extends AbstractAppTest {
public void twoUsersSignUp(@Optional Object[][] data) throws InterruptedException {
...
}
}
public class AppTest2 extends AbstractAppTest {
public void twoUsersSignUp(@Optional Object[][] data) throws InterruptedException {
...
}
}
方法的代码,它使用setUp
的两个子类中提供的twoUsersSignUp
方法的实现。
答案 1 :(得分:1)
您无法将方法转换为类。
但是,您可以创建新对象或修改现有对象。
答案 2 :(得分:1)
像这样初始化你的testData类
public class ApptestData{
public WebDriver driver;
public WebDriverWait wait;
public ApptestData() throws Exception {
File firefoxPath = new File(System.getProperty("lmportal.deploy.firefox.path", "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"));
FirefoxBinary ffox = new FirefoxBinary(firefoxPath);
ffox.setEnvironmentProperty("DISPLAY", ":20");
driver = new FirefoxDriver(ffox, null);
wait = new WebDriverWait(driver, timeoutInSeconds );
Object[][] data = new Object[1][2];
data[0][0] = driver;
data[0][1] = wait;
twoUsersSignUp(data);
return data;
}
}
然后在测试类中使用该对象
public class Apptest/AppTest2 {
@Test
public void twoUsersSignUp() throws InterruptedException{
AppTestData data = new AppTestData();
//test here
}
}
答案 3 :(得分:0)
您正在寻找的重构类型does not exists yet,至少在Eclipse上。
手动执行此操作is explained here
顺便说一下,在Eclipse中按 ALT SHIFT T ,您将找到重构现有代码的所有当前可能性,提取方法,类等。