当 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 可见元素?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上,当某些维度信息不可用时,我们如何在 viewDidLoad 中的屏幕上绘制东西?