Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用if-else和量角器_Javascript_Selenium_If Statement_Jasmine_Protractor - Fatal编程技术网

Javascript 如何使用if-else和量角器

Javascript 如何使用if-else和量角器,javascript,selenium,if-statement,jasmine,protractor,Javascript,Selenium,If Statement,Jasmine,Protractor,我有非常奇怪的情况,我不知道如何处理它 我是一个新加入testning的人,我得到了一个要测试的站点,在那里我们检查cart函数的工作属性 我的问题是,我们添加x个产品编号,然后进行库存检查。如果存在库存冲突,那么我们需要在继续之前解决它,否则我们只需继续 我成功地创建了一个如下所示的函数: describe("Details page", function () { detailsPage = new DetailsPage(); // The details page i

我有非常奇怪的情况,我不知道如何处理它

我是一个新加入testning的人,我得到了一个要测试的站点,在那里我们检查cart函数的工作属性

我的问题是,我们添加x个产品编号,然后进行库存检查。如果存在库存冲突,那么我们需要在继续之前解决它,否则我们只需继续

我成功地创建了一个如下所示的函数:

describe("Details page", function () {

    detailsPage = new DetailsPage();

    // The details page is accessible by the specified URL
    it(`Is defined by the URL: ${userData["url"]}${browser.baseUrl}`,
        async function () {
            await detailsPage.navigateDesktop();
        });

    // Details page has a form and it can be filled out with user data
    it("Has a form that can receive user data",
        async function() {
            await detailsPage.fillFormWithUserData();
            await utils.click(detailsPage.getForm().buttons.nextStep);
        });

    if (detailsPage.hasStockConflict()) {

        // Details page allows the user to fix conflicts in stocks
        it('Enables resolution of stock conflicts', async function () {
            // Wait for stock to fully load
            await detailsPage.hasStockConflict();
            await detailsPage.clickAllRemoveButtons();
            await detailsPage.clickAllDecreaseButtons();
        });

        // Details page allows the user to proceed to the next stage when all conflicts (if any) has been resolved
        it('Allows the user to proceed to the next stage of purchasing', async function () {
            const nextStepButton = detailsPage.getForm().buttons.nextStep;
            await utils.elementToBeClickable(nextStepButton);
            await utils.click(nextStepButton);
        });
    }
});
然而,我的功能问题是,我需要等待,直到我从服务器得到响应,否则我会得到股票冲突,这将由以下原因触发:

hasStockConflict() //checks if there is stockConflict message in DOM
否则我将被重定向到新页面

我的问题是,我如何在功能上进行排序,检查是否存在股票冲突,然后我们解决if语句,否则我们只需继续而不需要做任何事情(这将带我进入下一页)

我已将超时设置为1分钟。1分钟后,它将作为失败通过测试


基本上,我想解决if语句,如果有库存冲突,我们基本上跳过它。我可能已经误解了测试的目的,所以所有的知识也将被感激

每个测试都应该针对特定的东西进行测试。它们不应包含
if…else
分支。相反,您应该对每个场景进行测试。每个测试都需要满足特定场景的初始化数据

您有两种不同的方法来实现这一点:

  • 在您查询的资源中设置数据,并请求测试场景的特定数据

  • 模拟资源,以便请求返回为正在测试的场景策划的模拟数据


  • 为了补充Code Peedient提到的内容,您可以设置模拟数据以获得您认为合适的响应。您应该模拟不同的响应,并根据响应在一个测试中执行一个特定的操作。步骤中没有其他内容。
    在您的情况下,现在,使用您知道有库存的项目,或者添加始终处于库存状态的虚拟项目,并将没有库存的虚拟项目添加到数据库中。为两者以及您认为合适的方式编写单独的测试


    希望有帮助

    每个人都在说,为了避免将来的陷阱,我们应该遵循一些最佳实践

    然而,最佳实践1是它始终取决于您的公司、产品和需求。所以如果你决定要走这条路,那就去吧

    为什么您的方案不起作用 简而言之,您的
    it
    块是在浏览器启动之前构建的。当时 您的函数无法运行,我假设失败或返回未定义的

    答复 这么说^,你不能跳过它
    ,只要像这样把你的逻辑放进去就行了

            it('Enables resolution of stock conflicts', async function () {
              if (detailsPage.hasStockConflict()) {
                // Wait for stock to fully load
                await detailsPage.hasStockConflict();
                await detailsPage.clickAllRemoveButtons();
                await detailsPage.clickAllDecreaseButtons();
    
                const nextStepButton = detailsPage.getForm().buttons.nextStep;
                await utils.elementToBeClickable(nextStepButton);
                await utils.click(nextStepButton);
              }
            });
    

    在这种情况下,这意味着如果我想测试库存冲突,我应该在这种情况下插入需要在继续之前解决的产品,我相信对吗?在这种情况下,如果我想做一个选择,如果我想测试股票冲突与否,你会有什么建议?我想运行股票冲突功能,何时不运行?没有看到编辑,我在回答中添加了相同的内容!回答得好@我已经编辑了我的答案,包括了更多的细节。通常,测试不应该决定是否调用函数。他们应该遵循特定的配方,并验证结果是否正确。当有多个场景时,每个场景都应该单独测试。@代码学徒更有意义!我同意。我没想过,我想我们每天都会学到新的东西。但在这种情况下。如果我想为没有库存的物品和有库存的物品运行模拟数据示例,您会建议我阅读关于触发的内容吗?你知道我的意思吗?:)@GragratorNewbie应用程序中的数据来自何处?如果您正在向REST API或其他HTTP资源发出请求,则可以使用库(如
    nock
    fetch mock
    )来模拟HTTP请求的响应。这实际上是正确的。我写了一篇关于if的评论。就像你提到的,有两种测试,其中一种是检查库存,另一种是基本上有虚拟项目,并运行两个不同的测试。所以我想我需要一个函数,如果我想运行dummy或in stock函数,我可以在params中输入,或者你建议怎么做?@gragrantornewbie“就像你提到的,有两种测试,其中一种测试是检查库存是否……”我想你误解了。这里的重点是你有两个测试。保证获得库存商品并验证以下行为在该情况下是否正确的人。另一个测试保证得到一个没有库存的项目,并验证这种情况下的正确行为。这两个测试都不检查商品是否实际有库存。它应该以这样一种方式构建,以保证特定测试所需的状态。通常,我们使用功能标志来确保控制哪些功能处于活动状态。我们在测试开始时提供
    钩子
    ,因此我们控制一个特性标志,并在该测试中进行相应的测试。我建议你坚持用你认为合适的数据在一次测试中检查一件事。@LearningDaily原谅我反应迟钝!但我同意你们和代码学徒对我说的话。我真的很想得到一个更好的抓地力,更了解它应该如何工作以及!哦,非常感谢你!我明白你的意思,我想我可能还是有问题。问题在于
    detailsPage.hasStockConflict()
    是一个元素。当我们等待elemen弹出时,如果我们在1分钟内没有找到它,它将抛出一个超时,这将导致整个
    it
    功能基本上作为失败测试。