我有一些按钮,当单击这些按钮时,会生成一个ajax请求,当请求完成时,它会启用/禁用按钮(用于分页)。我不是100%确定如何处理,因为请求需要1000ms,我想知道这是不是通过等待next按钮启用来处理点击的正确方式:
When('I click {string} to navigate pagination', async (item: ButtonType) => {
const first = element(by.css('#first'));
const last = element(by.css('#last'));
switch (item) {
case 'first':
await last.click();
await browser.wait(until.elementIsEnabled(first.getWebElement()), 1500);
await first.click();
break;
}
});
我甚至需要告诉浏览器等待吗?或者量角器知道它需要自动等待吗?
这是我的一个断言:
Then('I should see the {string} set of items', async (item: ButtonType) => {
const firstEnabled = await element(by.css('#first')).isEnabled();
const prevEnabled = await element(by.css('#prev')).isEnabled();
const nextEnabled = await element(by.css('#next')).isEnabled();
const lastEnabled = await element(by.css('#last')).isEnabled();
switch (item) {
case 'first':
expect(firstEnabled).to.eq(false);
expect(prevEnabled).to.eq(false);
expect(nextEnabled).to.eq(true);
expect(lastEnabled).to.eq(true);
break;
}
});
当它运行时,我得到以下错误:
[chrome #01-6] ✖ Then I should see the "first" set of items
[chrome #01-6] AssertionError
[chrome #01-6] + expected - actual
[chrome #01-6]
[chrome #01-6] -true
[chrome #01-6] +false
第一个按钮应该禁用,因为它之前没有更多的页面,因为它是第一个页面。
我需要做什么才能让这件事通过?
发布于 2020-10-01 17:25:01
通常,每当应用程序在UI中等待请求填充结果时,都应该有一个正在加载的动画,以指示页面尚未加载。如果这是开发人员可以添加的东西,这将是理想的。在这种情况下,您只需等待加载动画消失
如果这不是一个选项,那么寻找任何UI更改,假设在收到结果之前按钮是禁用的,并且它清楚地指示应用程序正在等待结果,那么这将是最好的策略。你基本上可以添加等待,直到按钮可点击,或者做一个类似的函数。如果你在这方面有问题,请告诉我,我会帮助你的
发布于 2020-10-08 19:50:26
您可以使用ExpectedConditions
等待可单击的按钮。需要注意的一件事是,它不会检查您想要单击的按钮是否被另一个元素覆盖。它只检查元素是否已启用并在UI中可见,以便可以单击它。如果您的元素被覆盖或加载动画或类似的东西覆盖,那么您将需要等待该元素消失,或者至少不覆盖按钮,然后再单击它。下面是我使用它的方法:
import { ExpectedConditions } from 'protractor';
export default class MyClass {
public EC = ExpectedConditions;
public wait = 5000;
public async waitForElementToBeClickable(elem: ElementFinder): Promise<void> {
await browser.wait(this.EC.elementToBeClickable(elem), this.wait);
}
}
// usage
const myElement = element(by.css('my-button'));
await myClass.waitForElementToBeClickable(myElement);
await myElement.click();
https://stackoverflow.com/questions/64159761
复制相似问题