2014-05-09 31 views
23

Ho un pulsante sulla mia pagina che è visibile quando l'utente scorre verso il basso. A causa di questo, i test goniometro mi danno un errore:Goniometro: scorrere verso il basso

UnknownError: unknown error: Element is not clickable at point (94, 188).

Ho provato ad utilizzare:

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

che ha lavorato quando ho provato a goniometri elementexplorer.js ma nel mio test regolari non lo fa nulla. Qualsiasi altro modo intorno a questo?

risposta

42

è necessario attendere che la promessa sia risolta. il seguente esempio viene da un open issue

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

Grazie! Ha funzionato alla grande – xv47

+0

Sto affrontando lo stesso problema e il codice sopra funziona in firefox ma non in chrome.Qualsiasi aiuto è apprezzato ??? – EnugulaS

+1

@EnugulaS prova 'browser.executeScript ('argomenti [0] .click()', yourWebElem);' – Aaron

12

vorrei aggiungere alla risposta precedente, e si spera di fornire un po 'più spiegazione.

Questo codice, nella chiamata a 'executeScript':

'window.scrollTo(0,0);' 
  • Scorre la finestra verso l'alto, alla finestra coordinate 0,0 ... in sostanza fino alla cima
  • Se si conosce il area specifica a cui devi andare, basta cambiare le coordinate.

Se sai che vuoi essere in fondo alla finestra, quale era il mio obiettivo. È possibile inserire un numero molto elevato nel 'y' coordinata, come ho fatto qui:

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

Nel caso qualcuno altro sta avendo problemi come me:

stavo cercando di scorrere fino alla fine di la pagina per caricare il mio prossimo set di dati in uno scenario di scroll infinito. Ho provato diverse varianti di window.scrollTo e argomenti [0] .click() senza successo.

Infine mi sono reso conto, per far scorrere la pagina, ho dovuto mettere a fuoco la "finestra" facendo clic su qualsiasi elemento all'interno della finestra. Quindi window.scrollTo (0, document.body.scrollHeight) ha funzionato come un incantesimo!

codice di esempio:

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 
}); 
7

ho scoperto che la creazione di un aiutante util e usarlo oggetti della pagina all'interno (o file stessi test) ha aiutato. Questo sembra funzionare bene per me:

utils.js

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

all'interno oggetto pagina da qualche parte ...

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

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

nella prova stessa ...

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

Ho trovato un modo più semplice. Se si desidera selezionare un elemento è possibile utilizzare

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

Dopo che il browser si concentrerà l'elemento.

+0

Adoro questo approccio, grazie! Avevo sempre usato l'opzione scrollTo() ma quando dovevo farlo su un slimScroll in una finestra di dialogo modale, lo scroll stava influenzando lo sfondo, non lo slimScroll focalizzato nella mia modal. Inoltre, non è più necessario modificare la posizione Y nei miei test se il layout dello schermo cambia. :) –

+0

:) felice che abbia aiutato –

+0

Preferisco questo approccio anche se è rotto w/chrome http://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.actions – DEY

3

La risposta di questa domanda è stata contrassegnata corretta in alto risposta.Ma dopo l'aggiornamento il più recente chrome v54.Il codice seguente può essere la soluzione migliore.

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

Questo è quasi solo un ripetere [questa risposta esistente] (http://stackoverflow.com/questions/23571852/protractor-scroll-down/39074753#39074753). – Pang

+0

Esatto. Ma ha solo un voto. – Kimxinfo

+0

@Pang ma la tabulazione è diversa – c24w

0

altro modo, si può provare questo:

this.setScrollPage = function (element) { 

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

    browser.wait(execScroll, 5000); 

}; 
0

utilizzando executeScript fatto i miei test instabili così ora sto usando browser.actions() mouseMove (elemento) .Effettuare();. come suggerito da @Kimxinfo

Problemi correlati