javascript - Protractor :如何单击模态对话框中的按钮( Angular 元素)

标签 javascript angular protractor modal-dialog

我正在使用 Protractor 框架编写 Angular 应用程序的自动化测试。

测试场景:

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

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

我在点击模态对话框元素中的按钮时遇到问题。

我收到以下 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

enter image description here

问题

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

最佳答案

您从哪个元素中收到这些错误?如果是立即运行报告按钮,您可以尝试使用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();

关于javascript - Protractor :如何单击模态对话框中的按钮( Angular 元素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58957722/

相关文章:

angular - 我想用 If 条件更新我的 FormGroup

javascript - Protractor 无法解析 conf.js

angular - 如何将 Font Awesome 添加到 Angular 4+ 项目

angular - 嵌套 formGroup 将对象绑定(bind)到单选按钮

javascript - 皇家 slider : How to remove a slide using a class as selector

javascript - laravel 如何将数据传递到另一个 View

angular - Protractor .sendKeys() 不适用于 ngModel 的输入

javascript - Protractor 无法设置 ng-model 值

javascript - 谷歌地图加载两次

javascript - 水平滚动崩溃