2017-03-28 13 views
5

Używam noktowizyjne do e2etesting mojej aplikacji. Jeden z testów kończy się niepowodzeniem, ponieważ nie można go przewinąć do elementu, który testuję podejrzewam. Pytanie czy muszę przewijać, czy jest inny sposób na zrobienie tego? Jest to element I 'm testowania:Jak przewinąć do elementu za pomocą aplikacji Nightwatch?

return this.waitForElementVisible('#myElement', 4000) //wait for it to be visible 
     .assert.visible('#myElement') 
     .click('#myElement') 

Element znajduje się na górze strony, ale TestRunner przewinął się nieco w dół strony i nie jest widoczny na zrzucie ekranu. Jak mogę w razie potrzeby przewinąć do tego elementu? lub: Jak mogę przetestować ten element?

Odpowiedz

2

Istnieje metoda natywna w zegarku nocnym, aby wyświetlić elementy. (W elementach ogólnych powinny zawsze być przewijane do widoku z NightWatch/selenu Ale jeśli chcesz to zrobić ręcznie, można użyć getLocationInView().

return this.getLocationInView('#myElement') 
    .assert.visible('#myElement') 
    .click('#myElement') 

Nightwatch również obsługuje ten sposób bezpośrednio za pomocą protokołu Webdriver użyciu moveTo() bez abstrakcja.W tym przypadku będzie to wyglądać bardziej jak:

const self = this; 
return this.api.element('#myElement', (res) => { 
    self.api.moveTo(res.value.ELEMENT, 0, 0() => { 
    self.assert.visible('#myElement'); 
    self.click('#myElement'); 
    }) 
}); 

(to właśnie napisane z mojej głowie, mam nadzieję, że nie pomylisz)

Ale co może pomóc w przypadku zmienia seleniums Element zachowanie przewijania w config jak:

firefox: { 
    desiredCapabilities: { 
    browserName: 'firefox', 
    javascriptEnabled: true, 
    acceptSslCerts: true, 
    elementScrollBehavior: 1 
    } 
} 

domyślna to 0 -> Elementy są przewijane na górę strony

elementScrollBavior 1 -> Elementy są przewijane do dołu Strona

+1

Dobrze byłoby wspomnieć, że sposób natywny jest http://nightwatchjs.org/api/moveTo.html –

+0

@MikeDavlantes Dzięki dla ciebie wejścia. Próbowałem rozszerzyć mój opis, mam nadzieję, że pamiętałem, jak prawidłowo go używać w nocnym zegarku: "D – TheBay0r

4

Pamiętaj, że:

.execute() wstrzyknąć fragment kodu JavaScript na stronie wykonania w kontekście aktualnie wybranego kadru. Wykonywany skrypt jest z założenia synchroniczny, a wynik oceny skryptu jest zwracany klientowi.

i

Window.scrollTo() Przewijanie do określonego zestawu współrzędnych w dokumencie .

testu będzie wyglądać następująco:

module.exports = { 
    'your-test': function (browser) { 
     browser 
      .url("http://example.com") 
      .waitForElementPresent('body', 2000, "Be sure that the page is loaded") 
      .execute('scrollTo(x, y)') 
      .yourFirstAssertionHere() 
      .yourSecondAssertionHere() 
      ... 
      .yourLastAssertionHere() 
      .end() 
    } 
}; 
  • Jeśli wiesz, że element o identyfikatorze myElement jest w górnej części strony można po prostu zmienić x i y przez 0 (tylko aby upewnić się, że przewiniesz do góry strony).

  • Jeśli trzeba uzyskać dokładne wartości x i y, można użyć: getLocationInView() tak:

    module.exports = { 'your-test': function (browser) { browser .url("http://example.com") .waitForElementPresent('body', 2000, "Be sure that the page is loaded") .getLocationInView("#myElement", function(result) { //The x value will be: result.value.x //The y value will be: result.value.y }); } }

    .getLocationInView(): Określ położenie danego elementu na ekranie po przewinięciu do widoku ... Powoduje podanie współrzędnych X i Y dla elementu na stronie.

Nadzieja to pomóc.

2

można wykonać ten skrypt z executedocument.querySelector({{ACTUAL_SELECTOR}}).scrollIntoView();

+0

' scrollIntoView() 'jest zgodny we wszystkich głównych przeglądarkach. https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView#Browser_compatibility – lasec0203

Powiązane problemy