web-dev-qa-db-ja.com

分度器:下にスクロール

ユーザーが下にスクロールしたときに表示されるボタンがページにあります。このため、分度器テストではエラーが発生します。

UnknownError:不明なエラー:要素はポイント(94、188)でクリックできません。

私は使用してみました:

browser.executeScript('window.scrollTo(0,document.body.scrollHeight)');

分度器elementexplorer.jsでテストしたときに機能しましたが、通常のテストでは何もしません。これを回避する他の方法はありますか?

29
xv47

約束が解決されるまで待つ必要があります。次の例は 未解決の問題

_browser.executeScript('window.scrollTo(0,0);').then(function () {
    page.saveButton.click();
})
_

Update:これは古い質問(2014年5月)ですが、それでも訪問者がいます。明確にするために:window.scrollTo(0, 0)は現在のページの左上隅までスクロールします。

ページの一番下までスクロールしたい場合は、呼び出すことができます

window.scrollTo(0, document.body.scrollHeight)

this answer で@jsuserが言及したとおり

より現代的なアプローチは

browser.actions().mouseMove(element).perform();

この回答 で@MartinBlausteinに賛成票を投じる

53
nilsK

もっと簡単な方法を見つけました。あなたが使用できる要素にスクロールしたい場合

    browser.actions().mouseMove(element).perform();

その後、ブラウザは要素にフォーカスします。

30

前の回答に追加したいと思いますが、できればもう少し説明してください。

「executeScript」の呼び出しでのこのコード:

'window.scrollTo(0,0);'
  • ウィンドウを上にスクロールし、ウィンドウ座標0,0 ...本質的に最上部までスクロールします。
  • 移動する必要がある特定の領域がわかっている場合は、座標を変更するだけです。

あなたがウィンドウの一番下にいたいことがわかっているなら、それが私の目標でした。ここで行ったように、「y」座標に非常に大きな数を入れることができます。

browser.executeScript('window.scrollTo(0,10000);').then(function () {
    expect(<some control>.<some state>).toBe(<some outcome>);
})
13
Joe Famme

他の誰かが私のように問題を抱えている場合:

ページの一番下までスクロールして、無限スクロールシナリオで次のデータセットをロードしようとしました。 window.scrollToのさまざまなバリエーションとarguments [0] .click()を試しましたが、成功しませんでした。

最後に、ページをスクロールするには、ウィンドウ内の要素をクリックして「ウィンドウ」にフォーカスを移動する必要があることに気付きました。それから、window.scrollTo(0、document.body.scrollHeight)は魅力的でした!

サンプルコード:

element(by.className('<any element on page>')).click();
browser.executeScript('window.scrollTo(0,document.body.scrollHeight)').then(function(){
//whatever you need to check for here
});
9
jsuser

ユーティリティヘルパーを作成し、それをページオブジェクト(またはテストファイル自体)内で使用すると役立つことがわかりました。これは私にとってうまくいくようです:

utils.js

module.exports = {
  scrollIntoView: function(el) {
    browser.executeScript(function(el) {
      el.scrollIntoView();
    }, el.getWebElement());
  }
}

どこかのページオブジェクト内...

var scrollIntoView = require('../utils').scrollIntoView;

module.exports = {
  clickBackBtn: function() {
    var el = element(by.buttonText('Go back'));
    scrollIntoView(el);
    el.click();
    return;
  }
}

テスト自体で...

it('should allow the user to go back to the profile page', function() {
  PageObject.clickBackBtn();
  expect(browser.getCurrentUrl()).toContain('/user/profile');
});
8
Eamonn Gahan

この質問の答えは一番上に正解とマークされました。しかし、アップグレード後、最新のchrome v54。

browser.actions().mouseMove(element).perform();
3
Kimxinfo

長いページの最上部または最下部に移動するだけの場合は、「HOME」キーを使用して最上部に移動するか、「END」キーを使用して最下部に移動します。

例えば:

browser.actions().sendKeys(protractor.Key.HOME).perform();

または

browser.actions().sendKeys(protractor.Key.END).perform();
1
Kevin Burton

他の方法では、これを試すことができます:

this.setScrollPage = function (element) {

    function execScroll() {
        return browser.executeScript('arguments[0].scrollIntoView()',
            element.getWebElement())
    }

    browser.wait(execScroll, 5000);

};
0