问题:
在cy.get()
回调中使用within()
而不是在document
级别使用性能提高了吗?
建议的解决方案:
我想创建一个高阶函数,该函数具有一个“元素选择器函数”和一个“回调”函数,可用于包装组件的所有后续测试。我希望这可以提高性能,但是我没有足够的数据来支持这种说法。
export const withinEntryPoint = (callbackFn, entrySelectorFn) => () => entrySelectorFn().within(callbackFn);
entrySelectorFn
如下所示:
const selectEntryPoint = () => cy.get(`${selectors.ENTRY}`); // Or more complex logic if needed
对于每个测试,我都会做:
it('should do blah', withinEntryPoint(() => { ... }, selectEntryPoint)
所需结论:
这是否会使我的测试运行更快?还是我在浪费一些语法糖?
更新:
在研究了赛普拉斯的接口之后,它脱颖而出:
这里文档的关键部分是:“要在其中搜索子级的元素。如果为null,则从根级DOM元素开始搜索。”
在get()
上搜索文档大概是:Ω(n)
其中n = DOM elements
和Ω
的意思是“它必须遍历每个DOM元素以确保它是否符合选择器条件”
除非使用选择器进行内部优化,否则?假设cy.get('body > #id1 > #id2')
,其中cy.get()
仅在元素id2
中正确搜索ID为id1
的元素。
我想问题就出在这里,赛普拉斯是否根据选择器为您进行了优化?如果没有,那么我认为如果您有大量的单个组件化测试套件,从理论上讲,它将通过使用within()
设置范围来加快处理速度?