当 Angular 不可用时,如何等到 Protractor 可见元素?

Posted

技术标签:

【中文标题】当 Angular 不可用时,如何等到 Protractor 可见元素?【英文标题】:How do I wait until an element is visible with Protractor when Angular is not available? 【发布时间】:2017-03-14 18:44:40 【问题描述】:

我有一个用于量角器测试的登录功能,它看起来像这样:

var config = require("../helpers/config.js");

var login = function() 
    browser.driver.get(config.dsp.url);
    browser.driver.findElement(by.name("userName")).sendKeys(config.dsp.user);
    browser.driver.findElement(by.name("password")).sendKeys(config.dsp.password);
    return browser.driver.findElement(by.name("submit")).click().then(function() 
        return browser.driver.wait(function() 
            return browser.driver.isElementPresent(browser.driver.findElement(by.className("sample-class-name")));
        , 360000);
    );


module.exports = login;

我不能使用任何量角器特定的钩子,因为这个页面上没有使用 Angular,所以我必须使用底层的 webdriver API。问题是,我似乎无法弄清楚如何使用这个包装的 webdriver 对象等到元素可见。任何帮助将不胜感激。

【问题讨论】:

运行此测试时遇到的错误是 TypeError: "Invalid Locator" for browser.driver.isElementPresent。 如果 Angular 不存在,为什么不干脆禁用与 browser.ignoreSynchronization = true; 的同步? 好问题。登录完成后,Angular 就会出现。我只需要让用户通过非角度登录页面。 您可以禁用同步,然后在完成页面后启用它。请注意,您必须在控制流中安排分配。 这就是问题所在,我不太清楚页面何时完成,因为我无法确定告诉我完成的元素是否存在。 【参考方案1】:

尝试来自底层驱动程序的预期条件:

var config = require("../helpers/config.js");
var until = require('selenium-webdriver').until;

var login = function() 
    var driver = browser.driver;

    driver.get(config.dsp.url);
    driver.findElement(by.name("userName")).sendKeys(config.dsp.user);
    driver.findElement(by.name("password")).sendKeys(config.dsp.password);
    driver.findElement(by.name("submit")).click();

    return driver.wait(until.elementLocated(by.css(".sample-class-name")), 10000)
      .then(e => driver.wait(until.elementIsVisible(e)), 10000);


module.exports = login;

【讨论】:

谢谢。这就是我一直在寻找的。​​span> 谢谢你,我也一样! 我用上面的代码尝试过同样的问题,但它不适合我。

以上是关于当 Angular 不可用时,如何等到 Protractor 可见元素?的主要内容,如果未能解决你的问题,请参考以下文章

当数据库不可用时如何使 sqlplus 退出?

当预定义的类别不可用时如何对文本进行分类

当目的地不可用时如何停止使用骆驼路线中的消息

在 iOS 上,当某些维度信息不可用时,我们如何在 viewDidLoad 中的屏幕上绘制东西?

当 uibiquity 容器 (iCloud) 不可用时存储 UIManagedDocuments

歌曲不可用时的警报视图