0

数十の Selenium Webdriver テストがあります。それらを一度に実行したい。各テストで新しい Webdriver ブラウザー ウィンドウが開かないようにテストを実行するにはどうすればよいですか?

このような解決策は可能ですか?これにより、ドライバーから 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.... {
    }

新しいオブジェクトの初期化属性を設定すると、最初のテストが実行されますが、他のテストでは到達不能なブラウザー エラーが発生します。助けてください!

4

2 に答える 2

0

はあ、不注意ですみません。 これにより、ドライバーから nullPointErrorが発生します。これは、不適切な Web ドライバーの初期化によってのみ発生する可能性があります。で宣言public static WebDriver driver;public class TestSuiteてインスタンスを作成すると

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

あなたは必要ありません

public class Test

初期化

private WebDriver driver = TestSuite.driver;もう一度。その代わりに、次の方法で継承を使用public class Testし、静的として初期化されているため、単に自分のドライバーと呼ばれるというpublic class TestSuite注釈が付けられたテストで使用します。@Testコードは次のようになります:

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

今それがあなたのために働くことを願っています.

于 2012-10-11T20:47:39.770 に答える
-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を、開いている単一のブラウザー ウィンドウで実行することを意味します。これがお役に立てば幸いです。

于 2012-10-11T15:50:20.960 に答える