1

テストをリファクタリングした後、奇妙な問題に直面しました。実行時間を大幅に短縮するために、あらゆる場所で beforeEach/afterEach ブロックを非推奨にしましたが、今では単純な仕様でさえ次々と実行するのに問題があります。簡単な構成と仕様を作成しました。

構成:

 exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
    specs: [
        'googleSpec.js',
        'forgotPasswordPageTestSuite.js'
        ],
    capabilities:
    {
        browserName: 'chrome'
        //shardTestFiles: true,
        //maxInstances: 2
    },
    jasmineNodeOpts: {
        defaultTimeoutInterval: 360000
    }
}

仕様 1:

describe("Google Spec", function()
{

    browser.ignoreSynchronization = true;
    browser.get('http://google.com');

    browser.wait(function () {
        return element(by.name('q')).isDisplayed();
    }, 15000);

    it('Verify search inout is presented', function()
    {
        expect(browser.isElementPresent(element(by.name('q'))).toBe(true);
    });
});

仕様 2:

describe("Yandex spec", function()
{
    browser.ignoreSynchronization = true;
    browser.get('http://www.yandex.ru');

    browser.wait(function () {
             return element(by.id('text')).isDisplayed();
        }, 15000);
    });

    it('Verify that search input is presented', function()
    {
        expect(browser.isElementPresent(by.id('text'))).toBe(true);
    });
});

使用して別々に実行すると

shardTestFiles: true,
maxInstances: 2

それは問題ありませんが、上記の構成がある場合、次のような例外があります。

[ランチャー] WebDriver F のインスタンスを 1 つ実行しています。

失敗:

1) Google Spec 検索入出力が提示されていることを確認する メッセージ: false が true であると予想されます。Stacktrace: エラー: [object Object] で期待に失敗しました。(/Users/sergeyteplyakov/WebstormProjects/e2eMPP20/googleSpec.js:13:54)

6.339 秒で終了 2 つのテスト、2 つのアサーション、1 つの失敗

[ランチャー] まだ実行中の WebDriver の 0 インスタンス [ランチャー] chrome

1 件のテストに失敗しました [ランチャー] 全体: 1 件の仕様に失敗しました [ランチャー] プロセスはエラー コード 1 で終了しました

プロセスは終了コード 1 で終了しました

私の実際のテストでは、私の仕様が私が提供したものと似ている場合、同じ問題があります。何らかの理由で実際に何が起こっているかを見ると、最初の仕様が終了する前に、2番目の仕様の .get(url) メソッドの実行が開始されました。コアで重要な何かが欠けていると思います。誰か教えてください)

4

1 に答える 1

3

protractorこのセットアップでは、がそのwait()呼び出しを実行し、結果を待ってから実行するという保証はないと思いますit()

it仕様内のすべてのブロックの前に実行されるコードが必要な場合は、 beforeAll()(Jasmine 2 に組み込み、Jasmine 1.xのサードパーティとして利用可能) を使用します。

describe("Google Spec", function()
{
    beforeAll(function () {
        browser.ignoreSynchronization = true;
        browser.get('http://google.com');

        browser.wait(function () {
            return element(by.name('q')).isDisplayed();
        }, 15000);
    });

    it('Verify search inout is presented', function()
    {
        expect(browser.isElementPresent(element(by.name('q'))).toBe(true);
    });
});

また、 Expected Conditionswait()を使用してそのブロックを簡素化できることにも注意してください。

var EC = protractor.ExpectedConditions;
var elm = element(by.name('q'));

browser.wait(EC.visibilityOf(elm), 15000);
于 2015-04-08T18:51:47.190 に答える