Sauce Labs 无法执行 javascript
Sauce Labs failing to execute javascript
我将 Selenium WebdriverJs 与 Mocha 结合使用,通过 Travis CI 在 Sauce Labs 上进行 运行 测试。我已经在没有任何项目依赖性的情况下隔离了我的问题。请帮忙。
所以,如果我尝试定义一个附加对象,该对象具有访问 URL 和向下滚动的属性,在测试脚本本身内部,然后使用该对象执行操作,那么它就可以工作美好的。测试脚本的 link 在这里 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 and the link to the Sauce Build https://saucelabs.com/beta/tests/4cf734a141fb42548fff1ee623130c44/logs#3
的 link
现在,如果我创建一个名为 eventPage.js 的文件并将包含上述所有函数的文件导入到测试脚本中,那么它将不起作用。该文件的 link 是 https://github.com/Princu7/open-event-webapp/blob/stripped2/src/selenium/eventPage.js and the link to the test script is 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 and the Sauce Labs Link https://saucelabs.com/beta/tests/5d240513c5e74e639b9abb320316592d/logs#3 上失败构建的 link。只是为了确认,这两种方法都适用于我的本地机器。请帮忙。我在这上面投入了很多时间。谢谢!!祝你有美好的一天!
模块已缓存,您导入的模块是 class 原型。因此您需要创建一个新实例以避免冲突:
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");
});
编辑
这个问题与伊斯坦布尔有关。应用程序在 scroll 函数中注入一个全局变量来跟踪执行,但该变量仍未声明,因为它是在浏览器中执行的,而不是在节点中执行的。
解决此问题的一种方法是使用脚本作为字符串调用 executeScript
:
return this.driver.executeScript("window.scrollTo(0, arguments[0]);", 800);
我将 Selenium WebdriverJs 与 Mocha 结合使用,通过 Travis CI 在 Sauce Labs 上进行 运行 测试。我已经在没有任何项目依赖性的情况下隔离了我的问题。请帮忙。
所以,如果我尝试定义一个附加对象,该对象具有访问 URL 和向下滚动的属性,在测试脚本本身内部,然后使用该对象执行操作,那么它就可以工作美好的。测试脚本的 link 在这里 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 and the link to the Sauce Build https://saucelabs.com/beta/tests/4cf734a141fb42548fff1ee623130c44/logs#3
的 link现在,如果我创建一个名为 eventPage.js 的文件并将包含上述所有函数的文件导入到测试脚本中,那么它将不起作用。该文件的 link 是 https://github.com/Princu7/open-event-webapp/blob/stripped2/src/selenium/eventPage.js and the link to the test script is 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 and the Sauce Labs Link https://saucelabs.com/beta/tests/5d240513c5e74e639b9abb320316592d/logs#3 上失败构建的 link。只是为了确认,这两种方法都适用于我的本地机器。请帮忙。我在这上面投入了很多时间。谢谢!!祝你有美好的一天!
模块已缓存,您导入的模块是 class 原型。因此您需要创建一个新实例以避免冲突:
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");
});
编辑
这个问题与伊斯坦布尔有关。应用程序在 scroll 函数中注入一个全局变量来跟踪执行,但该变量仍未声明,因为它是在浏览器中执行的,而不是在节点中执行的。
解决此问题的一种方法是使用脚本作为字符串调用 executeScript
:
return this.driver.executeScript("window.scrollTo(0, arguments[0]);", 800);