2016-10-10 5 views
3

Ich habe eine Webseite, wo Scroll passiert mit dem nächsten Abschnitt auf der Webseite auf einen Klick auf eine Schaltfläche. Kann jemand bitte vorschlagen, wie man diese Rolle festhält? Der Code befindet sich im Anker-Tag und href zeigt auf #, um zum nächsten Abschnitt auf der Seite zu blättern. Ich bin mir nicht sicher, wie man überprüft, ob scroll tatsächlich funktioniert hat.Capturing Scroll auf Knopfdruck

Antwort

2

Sie können behaupten/Check paar Dinge in diesem Fall:

  • die current URL auf den richtigen # Abschnitt Punkt:

    expect(browser.getCurrentUrl()).toEqual("https://url.com/mypage#myparagraph"); 
    
  • check die scrollTop Position des body Element (unter der Annahme, es ist was gescrollt - oder der andere scrollbare Container):

    var body = $("body"); 
    expect(body.getCssValue("scrollTop")).toEqual("someValue"); // or apply the "greater than" check 
    
  • Kontrolle der current active element (vorausgesetzt, es ist ein Element, sobald die „Anker“ Absatz konzentrierte sich immer aktiv)
  • Lösung basierend auf Ihren Vorschlag window.pageYOffset zu verwenden - vergleichen Sie den Wert vor und nach dem Klick:

    browser.executeScript('return window.pageYOffset;').then(function (offsetBefore) { 
        offsetBefore = parseInt(offsetBefore); 
        button.click(); 
    
        browser.executeScript('return window.pageYOffset;').then(function (offsetAfter) { 
         offsetAfter = parseInt(offsetAfter); 
         expect(offsetAfter).toBeGreaterThan(offsetBefore); 
        }); 
    }); 
    
+0

Leider keine dieser Arbeit: So sollten Sie auch diesen Fall mit einer allgemeineren Lösung in Betracht ziehen. 1. Ich kann den ersten nicht verwenden, da sich meine Browser-URL nicht ändert. Es bleibt genau so, wie es vorher war. 2. Ich kann scrollTop nicht überprüfen. Die folgenden Befehle funktionieren nicht in meiner Anwendung. Ich habe den folgenden Code verwendet und eine lange Liste von Befehlen gedruckt. '' var body = $ ("Körper"); var scrollposition = body.getCssValue ("scrollTop"); console.log (Bildlaufposition); '' .ElementFinder { browser_: ProtractorBr 3. Auf Knopfdruck, Browser konzentriert sich nicht auf ein Element. Es zeigt nur Karte.Ich glaube nicht, dass es Fokus – NewWorld

+0

Unter Lösung arbeitete, aber ich wollte nicht Position in meinem Skript angeben. Ich habe Angst, Skript könnte fehlschlagen, wenn es in einer anderen Umgebung ausgeführt wird. 'browser.executeScript ('return window.pageYOffset;'). Then (Funktion (pos) { expect (pos) .toBe (829)}); ' Lassen Sie mich wissen, ob es eine bessere Lösung gibt. – NewWorld

+0

@NewWorld ah okay, gut, Sie können den 'pageYOffset' Wert vor dem Klick und nachher erhalten und die Werte vergleichen. Ich hoffe, das hilft. – alecxe

3

Sie könnten prüfen, ob der Anker am oberen Rand des Fensters auf das Bildfenster, indem Sie das positon relativ mit getBoundingClientRect() gescrollt wird:

browser.get('https://www.w3.org/TR/webdriver'); 
$("[href='#capabilities']").click(); 

// assert that the position of the anchor relative to the top border of the window is less than 16 pixels. 
var anchor = $('#h-capabilities'); 
var isCloseToTop = browser.executeScript(e => !(e.getBoundingClientRect().top >> 4), anchor); 
expect(isCloseToTop).toBeTruthy(); 

Beachten Sie, dass der Anker nicht ganz oben im Fenster liegt, sondern sich irgendwo innerhalb des Fensters befindet, wenn sich der Anker ganz unten im Dokument befindet. für mich

browser.get('https://www.w3.org/TR/webdriver'); 

$("[href='#informative-references']").click(); 
expect(isScrolledTop($('#h-informative-references'))).toBeTruthy(); 

function isScrolledTop(element) { 
    return browser.executeScript(function(elem) { 
    var doc = elem.ownerDocument, 
     viewHeight = doc.defaultView.innerHeight, 
     docBottom = doc.documentElement.getBoundingClientRect().bottom, 
     box = elem.getBoundingClientRect(); 
    return box.top > -1 && (box.top < 25 || (docBottom - viewHeight) < 25); 
    }, element); 
}