2017-08-17 42 views
3

testcafeを使用して、電子商取引ページでいくつかのテストを実行していますが、ランダムなポップアップがテストを中断しています。ウィンドウに表示されたら、Testcafeは次のセレクタをクリックしてテストを進めることができず、失敗します。Testcafeでポップアップする条件テスト

現在、私は次のように、セレクタを保持するためにファイルを.jsファイル使用しています。そして、

import { Selector } from 'testcafe'; 

    export default class Checkout { 
     constructor() { 
      //address 
      this.addressName = Selector('input#CC-checkoutCepAddressBook-sfirstname'); 
      this.addressLastname = Selector('input#CC-checkoutCepAddressBook-slastname'); 

//Rest of selectors... 
} 

、私は別の.jsにインポートし、機能などのテストを宣言:

import { ClientFunction } from 'testcafe'; 
import { Selector } from 'testcafe'; 
import Fixture from '../../../DesktopModel/Chrome/fixture.js'; 
import Home from '../../../DesktopModel/Chrome/home.js'; 
import Cart from '../../../DesktopModel/Chrome/cart.js'; 
... 
const fixtureUrlBase = new Fixture(); 
const home = new Home(); 
const pdp = new Pdp(); 
const cart = new Cart(); 
... 

export async function checkoutLoggedBoleto(t) { 

await t 
    .click(pdp.addToCartBtn) 
    .click(home.finishOrderBtn) 
    .click(cart.finishOrderBtn) 

    //Rest of the test actions...} 

最後に、私はテストコマンドを使用してテストを宣言し、別の.jsを実行しています:

test 
    .before(async t => { 
     await login(t); 
    }) 

('Desktop - User Login + Checkout with Invoice', async t => { 

    // Function Login => Search => PDP => Checkout with Invoice 
    await checkoutLoggedBoleto(t); 
}); 

ランダムなイベントです(製品ページや時々チェックアウトページなどの時々刻々と起こります)、ポップアップ 'x'が表示された場合のように、このポップアップをバイパスするだけの条件テストを使用することができます画面上で 'close popup'をクリックしてテストを続行し、テストを続行します。

私はtestcafe Test APIを検索して、そのような機能を発見していません。

私はtestcafe 0.17.0を使用しています。

答えて

1

TestCafeにはAPIがありません。あなたのケースを処理するために、各アクションの前にポップアップが表示されるかどうかを確認できます。 必要に応じて、あなたのコードのクリーナーを作るために、あなたは次のようにTestCafeのAPIアクションをラップすることができます:

import { t, Selector } from 'testcafe'; 

const closePopupBtn = Selector('.close-popup'); 

async function checkPopup() { 
    if(await closePopupBtn.exists) 
     await t.click(closePopupBtn); 
} 

const tc = { 
    click: async selector => { 
     await checkPopup(); 
     await t.click(selector); 
    } 
} 

test('my test', async() => { 
    await tc.click('.btn1'); 
    await tc.click('.btn2'); 
}); 
+0

は、いくつかのサンプルコードで質問を更新しました。あなたの提案を試みましたが、うまくいきませんでした。私はそれが間違っていたと信じています:) –

+0

ブルーノ、あなたはページの公開ですか?あなたが私のURLを共有している場合、私は実際の例を作成しようとすることができます –

+0

AlexanderMosありがとう、しかし私は自分自身を実装しようとするのが好きです。私はあなたの答えを取り、同僚と分かち合い、もう一度やり直します。 –

関連する問題