【问题标题】:Protractor: How to click on button in modal-dialog (angular element)量角器:如何单击模态对话框中的按钮(角度元素)
【发布时间】:2019-11-20 15:17:29
【问题描述】:

我正在使用量角器框架为 Angular 应用程序编写自动化测试。

测试场景:

  1. 点击按钮:创建 PDF 报告

    • 模态对话框窗口出现
  2. 单击按钮:在模态对话框中立即运行报告

我在单击 modal-dialog 元素中的按钮时遇到问题。

我收到以下 Protracor 错误

  1. 失败:过时的元素引用:元素未附加到页面文档,

  2. 失败:使用定位器找不到元素

测试

describe("Managing PDF Project Report", function () {
    it("contain create PDF project for test purpose ", async function () {
        await logIn();
        await element(by.css(".btn-group.pull-right > button ")).click();
        await element(by.css(".dropdown-menu.no-print")).element(by.css("li:nth-child(3) > a")).click();
        await browser.wait(element(by.css(".modal-footer > div > button:nth-child(2)")).click(), 5000);
    });

我也试图通过 ButtonText,ng-click 属性来查找元素,但它也没有工作。

HTML

问题

我有点困惑,因为这个元素的行为不像 iframe 或浏览器弹出的那样。 任何想法如何与此模式中的元素进行交互?

【问题讨论】:

    标签: javascript angular protractor modal-dialog


    【解决方案1】:

    您从哪个元素得到这些错误?如果是Run Report Now按钮,可以用css试试:

    element(by.css('[ng-click="createReport()"]');
    

    此外,我建议添加几个显式等待以确保 Protractor 正确等待:

    const EC = protractor.ExpectedConditions;
    
    await browser.wait(EC.visibilityOf($$('.modal-dialog .modal-content .modal-footer')), 5000);
    await browser.wait(EC.elementToBeClickable(element(by.css('[ng-click="createReport()"]')), 5000);
    await element(by.css('[ng-click="createReport()"]').click();
    
    

    【讨论】:

    • 是的,它与Run Report Now 按钮有关。我在没有 visibilityOf 的情况下使用了您的建议,因为我收到了 Wait timed out after 错误。最终代码完美运行:const EC = protractor.ExpectedConditions; await browser.wait(EC.elementToBeClickable(element(by.css('[ng-click="createReport()"]')), 6000)); await element(by.css('[ng-click="createReport()"]')).click(); await browser.sleep(5000);
    • 很高兴它有帮助!请问你最后为什么用browser.sleep()
    猜你喜欢
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多