0

サイドメニューを開いてログアウトボタンをクリックしてユーザーをログアウトさせる受け入れテストを作成しようとしています。チンパンジーが文句を言ってUncaught Error: element not visibleいます。これが私のテストです:

it('user can log out @watch', function() {
    //navigates to login form, fills in the form and submits, verifies that we see the hamburger (sidemenu) button.
    loginUser(ROLE_TYPE_ADMIN);

    //click the hamburger menu to slide open (reveal) the side menu
    browser.click("button.ion-navicon");

    //wait for animation to finish
    browser.pause(500);

    //wait for my login button to be recognized
    browser.waitForVisible('.mes-chimp-logout');

    //click the logout button (never gets this far – Uncaught Error: element not visible)
    browser.click('.mes-chimp-logout');
});

browser.clickそれが成功したという行を取り出すと、それが表示されていることを意味するため、私には奇妙です。

その他の洞察:

  • サイド メニュー ボタンをフォアグラウンド コンテンツのサイド メニューの外側に貼り付けると、クリック可能になります。
  • サイド メニューの外側のフォアグラウンド コンテンツはion-pane. スライドして、translate3d スタイルを使用してサイド メニューを表示します。

このエラーを解決してログアウト (または任意のサイド メニュー) ボタンをクリックするにはどうすればよいですか?

4

1 に答える 1

1

セレクターに要素を 1 つだけ含めるつもりでしたが、実際には 2 つあることがわかりました。実行時に、Ionic Framework は、おそらくアニメーションの目的で、ion-side-menu に関係するすべてのものを複製しているようですが、よくわかりません。複製されたすべての要素のうち、1 つが表示されたり入力されたりすることはありません (Angular テンプレートは入力されません)。コンソールで行う$('.mes-chimp-logout')と、2 つの要素が表示されます。良いものにカーソルを合わせると、UI のボタンが強調表示されます。他のものにカーソルを合わせると、何も強調表示されないため、DOM から切り離されているか、画面外/どこかで非表示になっています (これが、WebDriverIO が表示されていないと考える理由です。一方は表示されていません)。私はこれをやってしまった:

//get access to the element id of the second (index 1) copy of the element, the one I know is the visible, populated one.
const logoutBtnElementID = browser.elements('.mes-chimp-logout').value[1].ELEMENT;

//click it, using the target ID
browser.elementIdClick(logoutBtnElementID);
于 2016-08-20T07:44:30.267 に答える