2016-08-19 3 views
0

現在、MochaでSelenium-webdriverを使用しています& JavaScript環境でChai &偽の値を返す方法を探していますアイテムはDOMに存在しません。基本的にユーザーがログインしているかどうかを確認します。Mocha/Chaiを使用したセレン - 偽を返す方法はDOMに存在しない項目です

ログインしている場合は、次のものがDOMに存在します(ログインしていない場合は存在しません)。

<a class="account-panel-controls__link" role="link" id="sign-out-nav" data-log-out="">Sign out</a>

私は、そうでない場合、私は他のスニペットは、上記しない場合にのみ存在する何か他のものを(クリックしたい、それが存在する場合、それをクリックし&存在するかどうかを確認する方法を探しています)。

<a class="account-panel-controls__link" role="link" id="registration-sign-in-nav" data-log-out="">Sign in</a> 

私は次のいくつかのバリエーションを試してみたが、それはどこにも私を得ていないです。 Id 'sign-out-nav'を持つ要素が最初に存在する場合はうまく動作しますが、そうでなければその要素を見つけることができなかったというテストは失敗します(DOM内にないので推測しますか? )。

driver.findElement(By.id('sign-out-nav')).isDisplayed().then(function (displayed) { 
 
    if (displayed) { 
 
     driver.findElement(By.id('sign-out-nav')).click(); 
 
    } 
 
    else{ 
 
     driver.findElement(By.id('registration-sign-in-nav')).click(); 
 
    } 
 
});

私はポスト&の数を検索してきた、それは0上だが、その方法を実行するために何かを得ることができない場合&が見て).getSize(のようなものを試してみました。私はまた、 'findElements'と.lengthを併用しようとしましたが、[Object object]の値と1の長さを返しますので、値を区別することはできません。

紛失しているものがありますか?ページ要素を検索しようとしたとき

おかげ

+0

HTMLの要素がサーバーから送信されていますか?それとも、JavaScriptライブラリによって作成されたものですか?これは重要なことです。そのテクニックは、場合によって異なります。前者の場合は、要素を待つのをスキップすることができます。なぜなら、要素をテストするときに必然的にページに入るためです。 (そしてyes、 'driver.findElements'を使うとうまくいきます。)後者の場合、要素を待たなければなりません。 – Louis

答えて

0

セレンは本当に、本当に気まぐれです。 driver.wait()を使用してdriver.findElementを囲み、それが見つかるかどうかを確認します。

+0

今返信して謝罪します。私は待っているとは思っていません。彼らは既にページの読み込みの一部にサインイン/ジョインするのを待っています。私はまた、driver.sleep()のテスト中にそれを囲んだが、悲しいことに運がなかった。 – Sean

0

ない、これはあなたの場合に役立ちますが、webdriverio +モカ+ assertjs +セレンを使用して、私は次のように使用している場合を確認します。

assert.doesNotThrow(() => { browser.getText('#registration-sign-in-nav') }); 

ので際要素doesnのこれは、私が一緒に仕事スタックのために働きます存在しない場合、エラーが発生します。

関連する問題