在其中一个测试中,我需要滚动到元素的 View ,这可以通过 scrollIntoView()
完成使用通过 Protractor 定位的元素参数化脚本的方法:
var elm = element(by.id("myid"));
browser.executeScript("arguments[0].scrollIntoView();", elm.getWebElement());
但是,我们也可以直接通过getElementById()
找到元素。 :
browser.executeScript("document.getElementById('myid').scrollIntoView();");
这两种方法有什么区别?
选择 scrollIntoView()
仅用于示例目的。脚本中的逻辑可能更复杂。
最佳答案
第一个会明确告诉您元素何时丢失,而第二个会引发 JavaScript 错误,指出 null 没有 .scrollIntoView 方法。因此,为了保持第二个可维护性,您需要隐式处理元素丢失的情况,并通过适当的消息引发错误。
第一个暴露于意外/陈旧状态。 element(by.id("myid"))
找到的元素可以在执行 browser.executeScript()
之前从页面中删除。第二个未暴露此问题,因为在执行脚本时页面未更新。
第二个比较便宜,因为它执行一个 Selenium 命令 (ExecuteScript),而第一个执行两个 (FindElement 和 ExecuteScript)。向浏览器发送 Selenium 命令的成本相对较高(最少 25 毫秒),并且在多次调用时可能会变得很重要。
两者都会产生完全相同的结果,并且最终会在浏览器端调用相同的 API。
关于javascript - 在 Protractor 中定位元素与直接在 JavaScript 中定位元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38421587/