Nightwatch脚本在浏览器打开之前运行代码

Anasarbescu

在浏览器实际启动之前,我有很多测试在脚本首先运行的地方进行,有时这会使测试运行不正确。实际导致我出现问题的最新情况是一个try/catch表达式,在该表达式中它并没有真正抓住某些元素不存在(尽管预期不会存在)的事实。

在我的测试中,我试图遍历5个产品的列表,尝试将它们添加到购物车并检查按钮。对于某些产品,我知道“添加到购物车”按钮必须在那儿,在某些情况下,我知道它不会在那儿,所以我尝试捕获错误并移至下一个。(我知道这不是最聪明的方法,但是我正在一点一点地尝试学习和提高我的JavaScript编程技能)。

因此,除了从文件和一些变量声明中读取测试数据外,我的测试还包含此功能作为主要功能:

var myFunction = function (x) {
      var productID = data[x][0];
      var quantity = data[x][1];
      browser.url(homepage + 'p/' + productID);


      try {
            pageObject.addToCart(quantity);
            pageObject.click('@continueShopping');
            browser.pause(500);
            browser.assert.ok(true);
          }
      catch (err) {
            console.log('This error is expected');
            browser.asset.ok(true, 'but the product is not addable to cart');
         };
    }


for (var i = 0; i < data.length; i++) {
       myfunction(i);
    }

我得到这个:

[Add To Cart Different Products] Test Suite
==================================================================

Running:  Add to cart different types of products
 ? Passed [ok]: true ok
 ? Passed [ok]: true ok
 ? Passed [ok]: true ok
 ? Passed [ok]: true ok
 ? Passed [ok]: true ok // this means is ran through whole list of 5 products already and just afterwards it starts trying to actually add them to cart (run the code)
 ? Element <body> was visible after 360 milliseconds.
 ERROR: Unable to locate element: "#addToCartButton" using: css selector
 ERROR: Unable to locate element: ".continueShopping" using: css selector

此处发生的是,脚本一旦启动便立即运行断言,但实际上没有启动浏览器窗口。并且一旦启动,它将开始执行添加到购物车操作。因此,对我来说,它实际上并没有在其中运行整个代码序列try,这一开始就打破了使用的意义try/catch

我该如何解决这种情况?有没有办法让脚本等待浏览器真正启动,或者有办法检查脚本是否启动?我觉得Nightwatch有一些特定的东西会产生这种异步行为,而我在编写测试时却不见了。你能说明一下吗?

注意://编辑请注意,before在测试之前,我有一个障碍,那就是要首先启动浏览器并确保主体可见。但是,您可以在控制台结果中注意到,这是在声明之后发生的,因此它没有任何作用。

 before : function (browser) {
        browser.url(homepage)
        .waitForElementVisible('body', 5000);
 },

更新:根据某人的建议,这应该通过在该函数上使用回调来实现,我已经尝试过。当我这样使用它时:

var myFunction = function (x) {
        console.log("on line" + x);
        return x;
    };

    var callback = function (y) {
        //var declaration etc
        try { //the code here }
        catch (err) { //the code here }            
    };

    for(var lineNr = 0; lineNr < data.length; lineNr++) {
        myFunction(lineNr, function (){
            console.log(lineNr);
            callback(lineNr);
        });
    }

或像这样:

var myFunction = function (x,callback) {
        console.log("on line" + x);
        callback(x);
    };

    var callback = function (y) {
        // variables declaration
        try { //code here}
        catch (err) { //code here }
    };
    for(var lineNr = 0; lineNr < data.length; lineNr++) {
        myFunction(lineNr);
    }

我得到了相同的结果,但没有成功。还是我做错了?

RmXbdX

Selenium API命令是异步的。要强制夜行程序同步执行操作,您有2个选项:

  • JavaScript方式:创建承诺

  • 守夜方式:调用该.perform()方法并将您的操作放入回调参数中:

this.perform(function() {
  try {
      pageObject.addToCart(quantity);
      pageObject.click('@continueShopping');
      browser.pause(500);
      browser.assert.ok(true);
    }
  catch (err) {
      console.log('This error is expected');
      browser.asset.ok(true, 'but the product is not addable to cart');
   };
});

守夜人文档:了解命令队列(描述命令队列以及perform()命令的工作方式)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PowerShell脚本自行打开浏览器

来自分类Dev

运行脚本时,如何防止slimerjs浏览器打开?

来自分类Dev

运行脚本时如何防止slimerjs浏览器打开?

来自分类Dev

黄瓜@Before钩子打开多个浏览器窗口之前

来自分类Dev

浏览器可以在处理帖子请求之前处理脚本

来自分类Dev

量角器-打开浏览器,等待,运行测试

来自分类Dev

用于在特定浏览器中打开Google搜索的脚本

来自分类Dev

从npm脚本在浏览器中打开html文件

来自分类Dev

wkwebview中的条带打开浏览器页面加载脚本

来自分类Dev

使用脚本中的html打开浏览器窗口

来自分类Dev

在特定浏览器中打开Google搜索的脚本

来自分类Dev

在浏览器中打开URL的热键脚本?

来自分类Dev

为什么VS Code Live服务器打开目录而不是在浏览器中运行代码?

来自分类Dev

在页面卸载/浏览器关闭之前运行动画

来自分类Dev

在页面卸载/浏览器关闭之前运行动画

来自分类Dev

编写HTML代码以在浏览器中打开PDF

来自分类Dev

Java代码-如何检测浏览器是否打开

来自分类Dev

使用Java代码静默打开Web浏览器

来自分类Dev

编写HTML代码以在浏览器中打开PDF

来自分类Dev

VBScript打开,运行和关闭Tor浏览器

来自分类Dev

从Jenkins运行Cucumber测试时,浏览器无法打开

来自分类Dev

如何防止浏览器中的“停止运行此脚本”?

来自分类Dev

从浏览器启动/停止在后台运行的php脚本

来自分类Dev

关闭浏览器后,Google应用脚本停止运行

来自分类Dev

运行用户脚本时setInterval使我的浏览器崩溃?

来自分类Dev

运行PHP脚本而不输出到浏览器

来自分类Dev

使用PowerShell脚本检查正在运行的浏览器

来自分类Dev

如何防止浏览器中的“停止运行此脚本”?

来自分类Dev

运行用户脚本时setInterval使我的浏览器崩溃?

Related 相关文章

  1. 1

    PowerShell脚本自行打开浏览器

  2. 2

    运行脚本时,如何防止slimerjs浏览器打开?

  3. 3

    运行脚本时如何防止slimerjs浏览器打开?

  4. 4

    黄瓜@Before钩子打开多个浏览器窗口之前

  5. 5

    浏览器可以在处理帖子请求之前处理脚本

  6. 6

    量角器-打开浏览器,等待,运行测试

  7. 7

    用于在特定浏览器中打开Google搜索的脚本

  8. 8

    从npm脚本在浏览器中打开html文件

  9. 9

    wkwebview中的条带打开浏览器页面加载脚本

  10. 10

    使用脚本中的html打开浏览器窗口

  11. 11

    在特定浏览器中打开Google搜索的脚本

  12. 12

    在浏览器中打开URL的热键脚本?

  13. 13

    为什么VS Code Live服务器打开目录而不是在浏览器中运行代码?

  14. 14

    在页面卸载/浏览器关闭之前运行动画

  15. 15

    在页面卸载/浏览器关闭之前运行动画

  16. 16

    编写HTML代码以在浏览器中打开PDF

  17. 17

    Java代码-如何检测浏览器是否打开

  18. 18

    使用Java代码静默打开Web浏览器

  19. 19

    编写HTML代码以在浏览器中打开PDF

  20. 20

    VBScript打开,运行和关闭Tor浏览器

  21. 21

    从Jenkins运行Cucumber测试时,浏览器无法打开

  22. 22

    如何防止浏览器中的“停止运行此脚本”?

  23. 23

    从浏览器启动/停止在后台运行的php脚本

  24. 24

    关闭浏览器后,Google应用脚本停止运行

  25. 25

    运行用户脚本时setInterval使我的浏览器崩溃?

  26. 26

    运行PHP脚本而不输出到浏览器

  27. 27

    使用PowerShell脚本检查正在运行的浏览器

  28. 28

    如何防止浏览器中的“停止运行此脚本”?

  29. 29

    运行用户脚本时setInterval使我的浏览器崩溃?

热门标签

归档