如何将从一个量角器测试脚本中检索到的变量传递给另一个

时间:2019-02-14 10:04:25

标签: javascript protractor

我想实现以下目标:

  1. 在我的createPlan.js中为客户创建动态ID
  2. 将ID存储在全局变量中
  3. 在单独的文件sendforreview.js中使用此globalVariable

当前我正在使用茉莉花数据提供程序,但动态地我却不能
每次运行第一个js文件后都执行此操作,然后更新茉莉花数据
提供程序,然后运行下一个js文件,以便将计划编号作为
在搜索文本框中输入。

这是一个简单的逻辑,但是它将适用于我猜想的所有应用程序。

createplan.js 文件:

var plannumberis, using = require('jasmine-data-provider');
describe("Plan Creation", () => {
    using(leadEnters.leadinputs, (data, description) => {
        it("Plan is generated and stored globally", () => {
            jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000;
            browser.wait(EC.urlContains('WorkFlow/#/app/impPlan'));
            browser.wait(EC.presenceOf(element(by.xpath("//div[@class='sweModal-body']"))), 160 * 10000);
            var dialog = element(by.className("sweModal-body"));

            expect(dialog.isDisplayed).toBeTruthy();

            var dialog-text = element(by.className("sweModal-content"));
            dialogtext.getText().then(function (text) {
                console.log(text);

                plannumberis=text.slice(20, 28);// --here i store the plan number in var
                // plannumberis **

                console.log("implementation plan id is :" + plan);
                browser.wait(EC.presenceOf(element(by.css("button[class='btn btn-primary okBtn']"))));

                element(by.css("button[class='btn btn-primary okBtn']")).click();
            })
        })
    })
})

sendforreview.js

describe("STAGE 2:Developer Activities : Segment Checkout", () => {
    using(DeveloperInputs.Devinputs, (data, description) => {
        it("Developer checksout the required segments", () => {
            searchPlanId.clickSearch();
            searchPlanId.selectSearchTypeWithIndex(2);

            searchPlanId.enterImplementationNo(data.PlanNumber);// --here i want to
            // call theplannumber generated in the first js file.How to do this

            browser.wait(EC.presenceOf(element(by.css("i[class='fa fa-search']"))), 10000);
            searchPlanId.clickSearchButton();
            developerActions.editFirstImplementation(plannumberis);

            // Here I want to call the id generated in createplan.js

            // So in jasmine data provider I'm manually updating
            // this after I run the 1stjs file then pass it in second jsfile
        })
    })
})

2 个答案:

答案 0 :(得分:0)

您应该能够通过使用NodeJS的global variables关键字来实现此目的,该关键字使变量可被项目中的所有文件访问。

file1.js

//delcare var
global.newGlobalVar = 'value we want in another file'

file2.js

//use the var
console.log(newGlobalVar)

尽管看起来您在两个测试文件中都使用了循环,但我看不到这种方法对您有用

答案 1 :(得分:0)

您遇到的问题是var plannumberis模块(文件)范围内,而不在 global 范围内。您的变量只能在该规范文件中访问。

来自the docs的更多内容:

  

在浏览器中,顶级范围是全局范围。这意味着在浏览器var中,将定义新的全局变量。在Node.js中,这是不同的。顶级范围不是全局范围; var Node.js模块内部的某些内容对于该模块而言是本地的。

在全局范围内放置某些内容的方法是将其放置在global对象上。

global.plannumberis=text.slice(20, 28);

之后,您可以使用plannumberis从任何模块中引用它。


但是,我不能鼓励您在这里做出设计决定。不建议在这种规格之间保持高度依赖。按照您设计的方式,如果有人尝试独自运行sendforreview.js测试将以令人困惑且看似随意的方式失败。您应该编写规范,以便它们彼此独立并且可以按任何顺序运行。

在这种情况下,您可以通过将两个文件合并为一个规范来实现。