javascript TestCafe - 如何在不通过测试的情况下检查 Web 元素是否存在?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/47359687/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
TestCafe - How to check if a web element exists or does not exist without failing the test?
提问by Seth Eden
I'm trying to write a script that needs to adapt it's workflow behavior depending on whether a particular browser object found by CSS selector exists or does not exist.
我正在尝试编写一个脚本,该脚本需要根据 CSS 选择器找到的特定浏览器对象是否存在来调整其工作流程行为。
I do not want to use a document.getElementByID method as this is not technically a CSS selector, and our entire enterprise is standardized on CSS selector so anything that walks the DOM other then a CSS selector won't make it past our code review process anyway.
我不想使用 document.getElementByID 方法,因为这在技术上不是 CSS 选择器,而且我们的整个企业都在 CSS 选择器上进行了标准化,因此除了 CSS 选择器之外,任何遍历 DOM 的东西都不会通过我们的代码过程反正。
var thing = await things.thingSelector(thingName);
if (await t.expect(thing.exists).notOk()) {
await t.click(things.OpenThing(thingName));
} else {
return false;
}
return true;
Where thingSelector is:
thingSelector 在哪里:
const thingSelector = name =>
Selector('p.thing-header-title span')
.withText(name)
.parent('div.thing');
Where OpenThing is:
OpenThing 在哪里:
const OpenThing = name =>
thingSelector(name)
.find('a.thing-footer-item')
.withText('Open');
I need to be able to continue execution if the object is not there and I'm checking that it exists, or if the object is there and I'm checking that it does not exist, and also the cases where the object is not there and it does not exist and the object is not there and I'm checking that it does not exist.
如果对象不存在并且我正在检查它是否存在,或者如果对象在那里并且我正在检查它是否不存在,以及对象不存在的情况,我需要能够继续执行它不存在,对象也不存在,我正在检查它是否不存在。
In all cases I still need to proceed with the workflow.
在所有情况下,我仍然需要继续工作流程。
I've tried both sides of the logic coin:
我已经尝试了逻辑硬币的两面:
if (!await t.expect(thing.exists).ok())
And
和
if (await t.expect(thing.exists).notOk())
If one of the above doesn't fail in one scenario it will fail in the other, and the other one will fail in the scenario that the first one didn't fail. I need something that will give me the logic, but not ever fail the script execution and still allow me to return either True or False depending on if the object is present or not present.
如果上面的一个在一个场景中没有失败,它就会在另一个场景中失败,而另一个将在第一个没有失败的场景中失败。我需要一些能给我逻辑的东西,但永远不会使脚本执行失败,并且仍然允许我根据对象是否存在而返回 True 或 False。
Thank you in advance for helping me to solve this problem, and also to learn and grow in my Javascript skills!
提前感谢您帮助我解决这个问题,同时也让我在 Javascript 技能中学习和成长!
回答by Alexander Moskovkin
You can check the async existsproperty in the ifcondition in the following way:
您可以通过以下方式检查条件中的异步exists属性if:
if(await things.thingSelector(thingName).exists) {
// do something
}
回答by Mauricio Sánchez
You can use the following assertions to test existence and non-existence elements:
您可以使用以下断言来测试存在和不存在元素:
test('Test existence and non-existence elements', async t => {
await t
.expect(Selector('#existing-element').exists)
.expect(Selector('#non-existing-element').exists).notOk()
});

