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