是否可以将量角器的 by.cssContainingText 用于条件文本值?



我有将要更改的条件文本,并且没有太多类似的单词。有没有办法有条件地使用cssContainingText?文档似乎表明只能使用字符串或正则表达式值,但我想知道是否有解决方法?

下面的代码只是一个粗略的例子,但希望能描绘出画面。

let text;
if (a){
text = 'John Doe is a name';
} else if (b) {
text = 'Hello world';
} else if (c) {
text = 'This is a whole new sentence';
} else {
text = 'Default text'
}
return <div className='my-text'>{text}</div>;
element(
by.cssContainingText(
'my-text',
["/*Insert logic for conditional*/", ],
// even something like, 'text' || 'text-2' || 'text-3'
),
);

最简单的选择可能是使用ExpectedConditions,然后等待元素可见。意思是,做任何会导致文本更改的操作,然后等待该元素在页面上可见。你可以用两种方法来处理它,要么定义你希望在页面上的所有元素,要么创建一个函数,在那里你传递你想要的文本,等待它准备好。下面的示例假设您已经在类中的其他地方定义了EC和自定义等待时间。

const someText = 'my sample text';
await waitForElementWithText(someText);
// now do other stuff once element is visible
....
async function waitForElementWithText(waitForText) {
const elem = element(by.cssContainingText(waitFortext));
return browser.wait(EC.visibilityOf(elem), myWaitTime);
}

或者,如果您在等待该元素后需要与它交互,那么只需声明该元素并将其传递给等待函数

const elem1 = element(by.cssContainingText('my sample text');
const elem2 = element(by.cssContainingText('my other text');
// do some stuff that makes elem2 visible
await waitForElementVisible(elem2);
// now you can interact with elem2
...
async function waitForElementVisible(elem) {
return browser.wait(EC.visibilityOf(elem), myWaitTime);
}

最新更新