每个选择器类型的性能如何?
What are the performance of every selector's types?
在 CodeceptJs 中,您有不同的方法来 select 元素并操作它们以进行端到端测试:
- CSS select或
- Xpath select或
- 语义定位器
- 定位器生成器
但我对他们的表现有一些疑问。哪些是最好的定位器类型?
它们之间的比例是多少?
目前,我使用定位器生成器,但我不知道它们是否像 CSS select 或 ID selector.
这样有效
CodeceptJS 的定位器类型之间没有性能指标,AFAIK。
关于定位器类型
定位器生成器只是创建 xpath 定位器。
CSS 和 xpath 定位器对助手(WebDriver、Puppeteer、Playwright 等)具有相似的逻辑。
速度差异出现在浏览器驱动级别。
AFAIK,带有 WebDriver 的 IE11 使用 xpath 时运行速度更快,但是 Chrome 和带有 css 的 Firefox。
对于 Nightmare、Puppeteer 和其他人,它可能会有所不同。
对于语义定位器 - 这取决于定位器的类型。
它试图用一种策略而不是其他策略来查找元素。
因此,从技术上讲,语义定位器很可能会变慢。
CodeceptJS 技巧
我不知道你到底有多需要性能技巧,但我知道一个技巧(适用于当前和旧版本,<= 2.5.0):
如果您指定选择器的类型,例如 I.click({ css: "button#some-selector" });
,由于语义(模糊)定位器的实现,它会比使用 none 指定的选择器 I.click("button#some-selector")
快一点.
对于未描述的定位器类型,Codecept 将尝试 "guess" 您使用什么类型的定位器,并且在某些情况下,它会 运行 与语义定位器相同 - 搜索几个不同策略的次数。
UPD 添加了有关定位器类型的信息
在 CodeceptJs 中,您有不同的方法来 select 元素并操作它们以进行端到端测试:
- CSS select或
- Xpath select或
- 语义定位器
- 定位器生成器
但我对他们的表现有一些疑问。哪些是最好的定位器类型? 它们之间的比例是多少? 目前,我使用定位器生成器,但我不知道它们是否像 CSS select 或 ID selector.
这样有效CodeceptJS 的定位器类型之间没有性能指标,AFAIK。
关于定位器类型
定位器生成器只是创建 xpath 定位器。
CSS 和 xpath 定位器对助手(WebDriver、Puppeteer、Playwright 等)具有相似的逻辑。 速度差异出现在浏览器驱动级别。
AFAIK,带有 WebDriver 的 IE11 使用 xpath 时运行速度更快,但是 Chrome 和带有 css 的 Firefox。 对于 Nightmare、Puppeteer 和其他人,它可能会有所不同。
对于语义定位器 - 这取决于定位器的类型。 它试图用一种策略而不是其他策略来查找元素。 因此,从技术上讲,语义定位器很可能会变慢。
CodeceptJS 技巧
我不知道你到底有多需要性能技巧,但我知道一个技巧(适用于当前和旧版本,<= 2.5.0):
如果您指定选择器的类型,例如 I.click({ css: "button#some-selector" });
,由于语义(模糊)定位器的实现,它会比使用 none 指定的选择器 I.click("button#some-selector")
快一点.
对于未描述的定位器类型,Codecept 将尝试 "guess" 您使用什么类型的定位器,并且在某些情况下,它会 运行 与语义定位器相同 - 搜索几个不同策略的次数。
UPD 添加了有关定位器类型的信息