首页 > 解决方案 > 如何创建 xOR Protractor ExpectedCondition 打字稿以等待元素通过(如果不相等)

问题描述

我想创建一个预期条件,如果两个文本相似,它将失败,如果两个文本不相似,它将通过。类似于 xOR 逻辑。我在下面得到了我的代码,但它有错误,如果你能帮助我,将不胜感激。谢谢

https://www.protractortest.org/#/api?view=ProtractorExpectedConditions

在此处输入图像描述 在此处输入图像描述

const EC = protractor.ExpectedConditions;
const TextInfo1 = element(by.id('Text1'));
const TextInfo2 = element(by.id('Text2'));
console.log('Text1:', await TextInfo1.getText());
console.log('Text2:', await TextInfo2.getText());
await browser.wait(EC.or(EC.and(TextInfo1, EC.not(TextInfo2)),EC.and(EC.not(TextInfo1), TextInfo2)), 15000);

我在代码的最后一行的 TextInfo1 和 TextInfo2 上遇到了这个错误。

Argument of type 'ElementFinder' is not assignable to parameter of type 
'Function'.
  Type 'ElementFinder' is missing the following properties from type 
'Function': apply, call, bind, prototype, and 5 more.ts(2345)

标签: angulartypescriptjasmineprotractorwebautomation

解决方案


其实ExpectedCondition解决不了你的问题。更直接的方法是将函数定义为条件,browser.wait()如下所示:

const TextInfo1 = element(by.id('Text1'));
const TextInfo2 = element(by.id('Text2'));

await browser.wait(async function(){
    txt1 = await TextInfo1.getText();
    txt2 = await TextInfo1.getText();
    return txt1 !== txt2;
}, 15000)

注意:如果您使用,请不要getText()在外部调用,我们希望在超时内以间隔多次获取两者的文本。wait()awaitwait()15 seconds


推荐阅读