如何在不依赖 SELENIUM_PROMISE_MANAGER 进行同步的情况下让量角器测试等待多个元素?
How do I make a Protractor-test wait for multiple elements without relying on SELENIUM_PROMISE_MANAGER for synchronization?
[类似的问题以前也有人问过和回答过,但可用答案依赖SELENIUM_PROMISE_MANAGER同步。]
我是 运行 一个处理所有异步 activity 和 async/await 的测试环境。 AUT 在 dom 中加载一些东西,比如
<span class="bicon-lock_closed" data-month="8" data-year="2020"></span>
<span class="bicon-lock_closed" data-month="9" data-year="2020"></span>
<span class="bicon-lock_closed" data-month="10" data-year="2020"></span>
<span class="bicon-lock_closed" data-month="11" data-year="2020"></span>
这些元素中至少有一个始终存在。 Protractor 需要等待至少一个出现的预期条件。这是我得到的:
let lockIconArray: ElementArrayFinder = $$( "span.bicon-lock_closed" );
await browser.wait( Utils.presenceOfAll(lockIconArray, 2) , Data.TIMEOUT.M);
await lockIconArray.count().then( async (numberOfLocks) => {
await console.log( "Number of elements present: " + numberOfLocks );
await expect( numberOfLocks ).toBeGreaterThanOrEqual(2);
} );
调用静态方法class 'Utils':
public static async presenceOfAll(elements: ElementArrayFinder, minCountNo: number): Promise<boolean> {
return Promise.resolve( elements.count().then( (count) => {
return count >= minCountNo;
} ) );
}
Protractor 似乎根本没有等待。这会立即记录到控制台:
Number of elements present: 1
Expected 1 to be greater than or equal 2.
我认为这可以通过在 'presenceOfAll':
之前使用另一个 'await' 来解决
await browser.wait( await presenceOfAll(mEditor.lockIconArray, 2) , Data.TIMEOUT.M);
我走的路对吗?如果是这样:我如何让 'presenceOfAll' 方法解决第二个承诺?
如有疑问,您可以编写函数而不是使用 ExtectedConditions
库。在这种情况下,你可以做
let lockIconArray = $$('.bicon-lock_closed');
await browser.wait(
async () => (await lockIconArray.count()) > 2,
5000,
`message on failure`
);
[类似的问题以前也有人问过和回答过,但可用答案依赖SELENIUM_PROMISE_MANAGER同步。]
我是 运行 一个处理所有异步 activity 和 async/await 的测试环境。 AUT 在 dom 中加载一些东西,比如
<span class="bicon-lock_closed" data-month="8" data-year="2020"></span>
<span class="bicon-lock_closed" data-month="9" data-year="2020"></span>
<span class="bicon-lock_closed" data-month="10" data-year="2020"></span>
<span class="bicon-lock_closed" data-month="11" data-year="2020"></span>
这些元素中至少有一个始终存在。 Protractor 需要等待至少一个出现的预期条件。这是我得到的:
let lockIconArray: ElementArrayFinder = $$( "span.bicon-lock_closed" );
await browser.wait( Utils.presenceOfAll(lockIconArray, 2) , Data.TIMEOUT.M);
await lockIconArray.count().then( async (numberOfLocks) => {
await console.log( "Number of elements present: " + numberOfLocks );
await expect( numberOfLocks ).toBeGreaterThanOrEqual(2);
} );
调用静态方法class 'Utils':
public static async presenceOfAll(elements: ElementArrayFinder, minCountNo: number): Promise<boolean> {
return Promise.resolve( elements.count().then( (count) => {
return count >= minCountNo;
} ) );
}
Protractor 似乎根本没有等待。这会立即记录到控制台:
Number of elements present: 1
Expected 1 to be greater than or equal 2.
我认为这可以通过在 'presenceOfAll':
之前使用另一个 'await' 来解决await browser.wait( await presenceOfAll(mEditor.lockIconArray, 2) , Data.TIMEOUT.M);
我走的路对吗?如果是这样:我如何让 'presenceOfAll' 方法解决第二个承诺?
如有疑问,您可以编写函数而不是使用 ExtectedConditions
库。在这种情况下,你可以做
let lockIconArray = $$('.bicon-lock_closed');
await browser.wait(
async () => (await lockIconArray.count()) > 2,
5000,
`message on failure`
);