在赛普拉斯中创建一个随机字符串,并将其传递给cy命令

时间:2019-01-09 15:44:12

标签: javascript e2e-testing cypress

我是赛普拉斯的新手,有一个小问题,需要帮助。

我的应用程序中有一个输入字段,可让我输入名称。此名称必须唯一,并且不得与系统中现有的名称相同。

我当前通过以下方式单击此输入字段:
cy.get('input[type="text"].form-control')

如果我使用cy.type()命令,它将始终键入提供的相同值,但是每次测试运行时,我都希望分配一个不同的值。

// Fill in some details of a new class to proceed with creation  
cy.get('.pull-left > h4').contains('Add a new class')  
cy.get('input[type="text"].form-control') // Clicks on the field

// Some code to go here to create a random string and use what was created and 
type this into the field above

预期
创建一个函数,该函数允许生成随机字符串,然后使用普通的cypress命令将该字符串键入输入字段。

6 个答案:

答案 0 :(得分:6)

我刚刚在博客中找到了另一种方法,将其添加到此处以供参考。

const uuid = () => Cypress._.random(0, 1e6)
const id = uuid()
const testname = `testname${id}`
cy.get('input').type(testname);

为我工作得很好:)

答案 1 :(得分:4)

鉴于您需要每毫秒少于 1 个 id,您在并行环境中不需要唯一值,并且您不是时间旅行者,您可以使用 Date.now()

如果您需要每毫秒超过 1 个 id,您可以使用 Date.now() 作为 Cypress._.uniqueId() 的种子:

const uniqueSeed = Date.now().toString();
const getUniqueId = () => Cypress._.uniqueId(uniqueSeed);

it('uses a unique id', () => {
  const uniqueId = getUniqueId();
});

答案 2 :(得分:2)

尝试此代码。希望可以。

cy.get(':nth-child(2) > :nth-child(2) > input').type(userID_Alpha())
function userID_Alpha() {
    var text = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    for (var i = 0; i < 10; i++)
      text += possible.charAt(Math.floor(Math.random() * possible.length));

    return text;
  }

或使用以下代码

cy.get(':nth-child(2) > :nth-child(2) > input').type(userID_Alpha_Numeric())      

function userID_Alpha_Numeric() {
    var text = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    for (var i = 0; i < 10; i++)
      text += possible.charAt(Math.floor(Math.random() * possible.length));

    return text;
  }

答案 3 :(得分:0)

我创建了一个函数,该函数生成随机字符串,然后创建一个变量来存储此值,然后在其余测试的逻辑中使用该值。

    function generate_random_string(string_length) {
        let random_string = '';
        let random_ascii;
        for(let i = 0; i < string_length; i++) {
            random_ascii = Math.floor((Math.random() * 25) + 97);
            random_string += String.fromCharCode(random_ascii)
        }
        return random_string
    }

然后将其分配给以下变量:

var random_string = generate_random_string(8)

然后使用赛普拉斯的简单gettype命令从中提取输出并放入字段:

cy.get('input[type="text"].form-control').type(random_string)

这将获取值并将其键入到我想要的字段中。在任何测试中,我都可以再次“ random_string”,例如,如果我希望稍后在测试中做一些断言。

答案 4 :(得分:0)

@IBDesignable

上面的代码将生成随机字符串

答案 5 :(得分:-1)

我在这里做一些假设。我假设您要调用某种API来检查名称是否重复。我会存根/模拟它来解决它。我在这里猜测,但是您将名称传下来,并且得到的内容是true或false,因此请务必始终返回false,以便进行重复。