2012-10-11 36 views
0

我有幾十個Selenium Webdriver測試。我想一次運行它們。如何運行測試,以便每個測試都不會打開新的Webdriver瀏覽器窗口?ClassNameFilter和BeforeClass

是否有這樣的解決方案?這會導致驅動程序出現nullPointError。

 @ClassnameFilters({"com.company.package*", ".*Test"}) 

public class TestSuite { 

public static WebDriver driver; 

@BeforeClass 
public static void setUpClass() { 
    driver = new FirefoxDriver(); 
} 

@AfterClass 
public static void setDownClass() { 
    driver.quit(); 
} 

}

public class Test { 

private WebDriver driver = TestSuite.driver; 

@Test.... { 
    } 

啓用新的對象初始化屬性獲得的第一個試運行,但隨後其他人造成無法訪問瀏覽器的錯誤。請幫忙!

回答

-1

來處理這個問題,請嘗試使用@BeforeClass, @AfterClass註釋:

import com.google.common.base.Function; 
import com.thoughtworks.selenium.SeleneseTestBase; 
import junit.framework.Assert; 
import org.junit.AfterClass; 
import org.junit.Before; 
import org.junit.BeforeClass; 
import org.openqa.selenium.*; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.RemoteWebDriver; 
import org.openqa.selenium.support.ui.FluentWait; 
import org.openqa.selenium.support.ui.Wait; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; 
import org.springframework.core.io.support.PropertiesLoaderUtils; 

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.NoSuchElementException; 
import java.util.Properties; 
import java.util.concurrent.TimeUnit; 


public class BaseSeleniumTest extends SeleneseTestBase { 
static WebDriver driver; 


@Value("login.base.url") 
private String loginBaseUrl; 

@BeforeClass 
public static void firefoxSetUp() throws MalformedURLException { 

    DesiredCapabilities capability = DesiredCapabilities.firefox(); 


    driver = new RemoteWebDriver(new URL("http://192.168.4.52:4444/wd/hub"), capability); 


    driver = new FirefoxDriver(); //for local check 

    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
    driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); 
    driver.manage().window().setSize(new Dimension(1920, 1080)); 
} 
@Before 
public void openFiretox() throws IOException { 


    driver.get(propertyKeysLoader("login.base.url")); 


} 


@AfterClass 
public static void closeFirefox(){ 
    driver.quit(); 
} 

....

@BeforeClass意味着你初始化的東西,全部由@Test註釋以下Selenium測試在一個瀏覽器中運行窗戶打開。 希望這可以幫助你。

+0

作者已使用此 –

+0

StéphanePiette,在我看來,你離開故意downvote問題的答案我已經回答了: http://stackoverflow.com/questions/12833847/opening-selenium -webdriver-tests-in-the-the-window/12834238#12834238 說到這一點,問題的作者面臨這樣的問題,因爲'公共類測試'中驅動程序初始化不當。而且您StéphanePiette沒有提供任何基礎,因爲我提供了100%的工作代碼用於我的目的,因此我的答案無效或不正確。 此致敬禮。 –

0

哈,對不起我的疏忽。 這會導致驅動程序發生nullPointError,這些錯誤只能由不正確的Web驅動程序初始化引起。 正如你申報public class TestSuitepublic static WebDriver driver;

@BeforeClass 
public static void setUpClass() { 
    driver = new FirefoxDriver(); 
} 

創建實例,你不需要在

public class Test

初始化

private WebDriver driver = TestSuite.driver;一次。 而不是它我會用以下方式使用從public class TestSuite繼承public class Test,並在我的測試註釋由@Test簡單地稱爲我的驅動程序,因爲它被初始化爲靜態。代碼如:

public class Test extends TestSuite { 
@Test 
public void findButtonAndClickOnIt(){ 
String buttonCssSelector ="...blablabla..."; 
driver.findElement(By.cssSelector(buttonCssSelector)).click(); 
} 
} 

希望現在它適用於你。

+0

不,這還不是我的工作。我還需要分別運行每個測試 - 每個測試必須有自己的類。在這種情況下,BeforeClass的工作方式與After相同,並且在每次測試後關閉窗口。其他問題是,窗口很快關閉。我試過driver.manage()。timeouts()。implicitlyWait(4000,TimeUnit.SECONDS);但它沒有幫助。 – mjgirl

+0

在我的項目中我使用層次結構,我在後期描述。我有基本的類,我們得到了驅動程序的初始化,還有一些其他的類還有繼承自這個基本類的測試。一個類包含一組測試。所以如果你運行一個包含在一個類的邊界中的包 - 你有一個驅動實例。如果你想爲每個測試獲得一個類,那麼很多驅動程序的實例將被創建。每個班的一個例子。恕我直言,最好在一個類中放入一組測試,以便只創建一個驅動程序實例。除此之外,我沒有看到您的問題的替代解決方案。 –

相關問題