J'ai un bouton sur ma page qui est visible lorsque l'utilisateur fait défiler vers le bas. Pour cette raison, les tests du rapporteur me donnent une erreur:
UnknownError: erreur inconnue: l'élément n'est pas cliquable au point (94, 188).
J'ai essayé d'utiliser:
browser.executeScript('window.scrollTo(0,document.body.scrollHeight)');
ce qui a fonctionné lorsque je l'ai testé dans les rapporteurs elementexplorer.js mais dans mes tests réguliers, il ne fait rien. Une autre façon de contourner cela?
vous devez attendre que la promesse soit tenue. l'exemple suivant provient d'un problème ouvert
browser.executeScript('window.scrollTo(0,0);').then(function () {
page.saveButton.click();
})
Mise à jour : C'est une vieille question (mai 2014), mais elle reçoit quand même quelques visiteurs. Pour clarifier: window.scrollTo(0, 0)
défile vers le coin supérieur gauche de la page actuelle.
Si vous souhaitez faire défiler jusqu'au bas de votre page, vous pouvez appeler
window.scrollTo(0, document.body.scrollHeight)
comme mentionné par @jsuser dans cette réponse
Une approche plus moderne consisterait à utiliser
browser.actions().mouseMove(element).perform();
Upvotes à @MartinBlaustein dans cette réponse
J'ai trouvé un moyen plus simple. Si vous souhaitez faire défiler jusqu'à un élément, vous pouvez utiliser
browser.actions().mouseMove(element).perform();
Après cela, le navigateur concentrera l'élément.
Je voudrais ajouter à la réponse précédente et, espérons-le, fournir un peu plus d'explications.
Ce code, dans l'appel à 'executeScript':
'window.scrollTo(0,0);'
Si vous savez que vous voulez être tout en bas de la fenêtre, c'était mon objectif. Vous pouvez mettre un très grand nombre dans la coordonnée "y", comme je l'ai fait ici:
browser.executeScript('window.scrollTo(0,10000);').then(function () {
expect(<some control>.<some state>).toBe(<some outcome>);
})
Au cas où quelqu'un d'autre aurait des problèmes comme moi:
J'essayais de faire défiler vers le bas de la page pour charger mon prochain ensemble de données dans un scénario de défilement infini. J'ai essayé différentes variantes de window.scrollTo ainsi que des arguments [0] .click () sans succès.
Finalement, j'ai réalisé que pour faire défiler la page, je devais mettre l'accent sur la "fenêtre" en cliquant sur n'importe quel élément de la fenêtre. Ensuite, window.scrollTo (0, document.body.scrollHeight) a fonctionné comme un charme!
exemple de code:
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
});
J'ai trouvé que la création d'une aide utilitaire et son utilisation dans des objets de page (ou les fichiers de test eux-mêmes) ont aidé. Cela semble bien fonctionner pour moi:
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');
});
La réponse à cette question a été marquée comme correcte en haut de la réponse.Mais après la mise à niveau du plus récent chrome v54.Le code suivant est peut-être la meilleure solution.
browser.actions().mouseMove(element).perform();
Si vous cherchez simplement à naviguer vers le haut ou le bas d'une longue page, vous pouvez simplement utiliser la touche "ACCUEIL" pour aller trop haut, ou la touche "FIN" pour aller vers le bas.
par exemple:
browser.actions().sendKeys(protractor.Key.HOME).perform();
ou
browser.actions().sendKeys(protractor.Key.END).perform();
Sinon, vous pouvez essayer ceci:
this.setScrollPage = function (element) {
function execScroll() {
return browser.executeScript('arguments[0].scrollIntoView()',
element.getWebElement())
}
browser.wait(execScroll, 5000);
};