通过自动单击按钮自动验证结果

时间:2019-07-03 05:03:47

标签: protractor automated-tests ui-automation

网页上有一个按钮,如果我第一次单击该按钮,将花费一些时间来获取状态。完成后,如果我说了三分钟后单击,则状态为成功。

这里的问题是我必须在两次单击之间指定睡眠时间以验证状态,有时由于此睡眠时间,导致状态不同步。例如,我单击一个按钮并显示状态,如果3分钟后单击,则状态有时会成功,或者有时状态仍在进行中,这会使我的TC失败。

没有任何方法可以自动单击按钮,直到状态进展为止,然后我可以验证状态。对于成功状态也是如此。

我两次点击之间都处于睡眠状态

    browser.sleep(25000) 

    button.click();
    expect(inprogress_class.getText()).toContain('in progress');

    browser.sleep(100000) // waiting for a defined time to click a buttonassuming that status will be successful

    button.click();
    expect(successful_class.getText()).toContain('successful);

预期:按钮会不断被点击,直到状态更改为止

实际:在点击和等待状态更改之间留出睡眠时间

2 个答案:

答案 0 :(得分:0)

尝试以下选项

首次单击并等待InProgress状态

await button.click();
await browser.wait(ExpectedConditions.textToBePresentInElement(await inprogress_class), 25000, 'The wait for inProgress state');

要单击按钮,直到成功,请尝试以下操作

 while (await successful_class.getText() !== 'successful') {
  await button.click();
  await browser.sleep(10000); // update the time with how often the button needs to be clicked
 }
 expect(await successful_class.getText()).toContain('successful);

希望它对您有帮助

答案 1 :(得分:0)

如果您可以使用async / await,那么它将更加容易,否则您将不得不使用Promises链接。

尝试使用异步/等待方法:

await browser.wait(async () => {
        await button.click();
        var buttonText = await inprogress_class.getText();
        return buttonText === 'in progress';
       }, 180000); 
expect(inprogress_class.getText()).toContain('in progress');

await browser.wait(async () => {
        await button.click();
        var buttonText = await successful_class.getText();
        return buttonText === 'successful';
       }, 180000); 
expect(successful_class.getText()).toContain('successful);