1

Selenium Grid 2と一緒にTestNGを使用してテストを並行して実行しようとすると、問題が発生しているようです。

実行しているテストの数に合わせて適切な数のブラウザーが開かれていますが、すべてのテストのすべての命令が同じブラウザーウィンドウに対して実行されています。たとえば、各テストでページが開き、ログインが試行されます。4つのブラウザウィンドウが開きますが、1つのブラウザウィンドウがログインページに4回移動し、ユーザー名を4回入力しますが、残りのブラウザウィンドウは残ります。非活性。

グリッドを開始する方法は次のとおりです。

java -jar selenium-server-standalone-28.0.jar -role hub
java -jar selenium-server-standalone-28.0.jar -webdriver.chrome.driver="*location*/chromedriver_mac" -role node 

スイートxmlの設定方法は次のとおりです。

<suite name="testng" verbose="1" parallel="classes">
    <test name="chrome">
        <packages>
            <package name="login"/>
            <package name="lists"/>
        </packages>
    </test>
</suite>

そして、これがテストのレイアウトの例です。

public class login_logout extends TestBase {
    @Test
    public void login(){
        //initiates login page object and call super user login
        LoginPage login = LoginPage.navigateTo(driver, base_url)
        LoggedInPage loggedIn = login.superuserlogin();
        }
    }

テストベースは次のようにレイアウトされています。

public class TestBase {
    public static WebDriver driver;
    public static DesiredCapabilitiess capabilities;
    @BeforeClass
    public static void setUp(){
        base_url = "*login page url*;
        capabilities = DesiredCapabilities.chrome();
        driver = new RemoteWebDriver(capabilities);
        driver.get(base_url);
    }
}

私が行方不明になっていることはおそらく本当に明白なことですが、助けていただければ幸いです。

前もって感謝します。

4

2 に答える 2

4

ドライバオブジェクトは静的です。したがって、4つの初期化が発生し、4つのブラウザーが起動しますが、ドライバーは静的であり、最後に初期化されたブラウザーへの参照のみを保持するため、すべてのコマンドが同じドライバーに対して実行されます。並列実行のためにスレッドローカルオブジェクトを探索してみることができます。

于 2013-02-14T17:57:41.373 に答える
0

私の観点から、あなたはWebDriverとTestNGを選択する際に正しい決断をしました。しかし、これらは本当に強力なツールであるという事実のために、知っておくべきいくつかの基本があります。

最初のステップでは、一般的なプログラミングの経験を積むことが重要です。

次に、追加できる特定のトリックがいくつかあります。

すべての単一のテストクラス(コンストラクターまたは@BeforeClassのいずれか)でWebDriverを初期化してみませんか?

後で、@DataProviderおよび@Factoryパターンを使用して構成を行うこともできます。

かっこいい!

于 2013-02-18T16:45:42.833 に答える