我有一个clientFunction作为页面对象的一部分,以检索样式单独的规则:
getStyleRule(ruleName: string): Promise<string> {
declare var selector: Selector;
return ClientFunction(() =>
selector().style.getPropertyValue(ruleName), {
dependencies: { selector: this.selector, ruleName }
})();
}
然后在我的测试中,我将鼠标悬停在元素上并期望样式更改:
await t.hover(someSelector);
await t.expect(pageObject.getStyleRule('width')).eql('100%')
这似乎在Chrome 68上始终失败,但是如果我将speed: 0.5
添加到悬停操作中,它将通过。这使我相信智能查询不会重试其值来自客户端函数的断言。
或者,我调用clientFunction的方式可能做错了事。
答案 0 :(得分:2)
1)TestCafe等待并自动重新评估ClientFunctions返回的结果;以下测试证明了这一点:
import { ClientFunction } from 'testcafe';
fixture('Client Function')
.page('http://example.com');
function clientFunction():Promise<any> {
return ClientFunction(() => false)();
}
test('Reevaluate', async t => {
await t.expect(clientFunction()).ok({ timeout: 30000 });
});
在重新评估断言时,您将看到“等待断言执行”消息。
2)您不必使用ClientFunction来检索元素的样式属性;您可以简单地使用Selector的getStyleProperty方法。
3)我无法确定是否不首先与您的页面进行交互,但是我猜想悬停动作执行得太快而无法被页面上的脚本识别。在这种情况下,您可以在悬停操作之前设置测试速度,然后在悬停操作之后使用t.setTestSpeed方法恢复测试速度:
await t
.setTestSpeed(0.5)
.hover(...)
.setTestSpeed(1.0)