gpt4 book ai didi

javascript - Sauce Labs 无法执行 javascript

转载 作者:行者123 更新时间:2023-11-29 11:02:19 26 4
gpt4 key购买 nike

我将 Selenium WebdriverJs 与 Mocha 结合使用,通过 Travis CI 在 Sauce Labs 上运行测试。我已经在没有任何项目依赖性的情况下隔离了我的问题。请帮忙。

因此,如果我尝试在测试脚本本身内部定义一个具有访问 URL 和向下滚动属性的附加对象,然后使用该对象执行操作,那么它就可以正常工作。测试脚本的链接在这里https://github.com/Princu7/open-event-webapp/blob/stripped/test/serverTest.js

如果我们这样做:

var eventPage = {                                                                                                                      

init: function(webdriver) {
this.driver = webdriver;
},

visit: function(url) {
return this.driver.get(url);
},

scrollDown: function() {
function scroll() {
window.scrollTo(0, arguments[0]);
}
return this.driver.executeScript(scroll, 800);
}
};
var driver = // Initialize the selenium webdriver
eventPage.init(driver)
eventPage.visit('http://reddit.com')
eventPage.scrollDown().then(function() {
console.log("This works fine on Sauce Labs");
});

这在 Sauce Labs 上运行良好。这是 Travis 构建的链接 https://travis-ci.org/Princu7/open-event-webapp/builds/252652917以及 Sauce Build 的链接 https://saucelabs.com/beta/tests/4cf734a141fb42548fff1ee623130c44/logs#3

现在,如果我创建一个名为 eventPage.js 的文件并将其包含所有上述功能导入到测试脚本中,那么它就不起作用。该文件的链接是 https://github.com/Princu7/open-event-webapp/blob/stripped2/src/selenium/eventPage.js测试脚本的链接是 https://github.com/Princu7/open-event-webapp/blob/stripped2/test/serverTest.js

module.exports = {                                                                                                                     

init: function(webdriver) {
this.driver = webdriver;
},

visit: function(url) {
return this.driver.get(url);
},

scrollDown: function() {
function scroll() {
window.scrollTo(0, arguments[0]);
}
return this.driver.executeScript(scroll, 800);
}
};

然后导入到我的测试脚本中,

var eventPage = src('path of the above file');
var driver = // Initialize the selenium driver
eventPage.init(driver)
eventPage.visit('http://reddit.com');
eventPage.scrollDown().then(function() {
console.log("This given an error");
});

这会导致 Sauce Labs 出现错误。这是 Travis CI 上失败构建的链接 https://travis-ci.org/Princu7/open-event-webapp/builds/252655787和 Sauce Labs 链接 https://saucelabs.com/beta/tests/5d240513c5e74e639b9abb320316592d/logs#3 .只是为了确认,这两种方法都适用于我的本地机器。请帮忙。我在这上面投入了很多时间。谢谢!!祝你有美好的一天!

最佳答案

模块被缓存,你导入的模块是一个类原型(prototype)。因此您需要创建一个新实例以避免冲突:

var EventPage = require('./EventPage.js');

var eventPage = Object.create(EventPage);
eventPage.init(driver)
eventPage.visit('http://reddit.com');
eventPage.scrollDown().then(function() {
console.log("This given an error");
});

编辑

这个问题与 Istanbul 尔有关。应用程序在滚动函数中注入(inject)一个全局变量来跟踪执行,但该变量仍未声明,因为它是在浏览器中执行的,而不是在节点中执行的。

解决此问题的一种方法是调用 executeScript 并将脚本作为字符串:

return this.driver.executeScript("window.scrollTo(0, arguments[0]);", 800);

关于javascript - Sauce Labs 无法执行 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45047795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com