ale*_*cxe 8 javascript testing selenium selenium-webdriver protractor
在其中一个测试中,我需要滚动到一个元素的视图,这可以通过使用Protractor定位的元素参数化脚本的scrollIntoView()
方法来完成:
var elm = element(by.id("myid"));
browser.executeScript("arguments[0].scrollIntoView();", elm.getWebElement());
Run Code Online (Sandbox Code Playgroud)
但是,我们也可以通过getElementById()
以下方式直接找到元素:
browser.executeScript("document.getElementById('myid').scrollIntoView();");
Run Code Online (Sandbox Code Playgroud)
这两种方法有什么区别?
在scrollIntoView()
被选择用于仅样品的目的.脚本中的逻辑可能更复杂.
第一个将明确告诉您何时元素丢失,而第二个将引发一个JavaScript错误,指出null没有.scrollIntoView方法.因此,为了保持第二个可维护,您需要在元素丢失时隐式处理这种情况,并使用适当的消息引发错误.
第一个暴露于意外/陈旧状态.找到的元素element(by.id("myid"))
可以在执行之前从页面中删除browser.executeScript()
.第二个没有暴露于此问题,因为在执行脚本时页面未更新.
第二个是较便宜的,因为它执行一个Selenium命令(ExecuteScript),而第一个执行两个(FindElement和ExecuteScript).向浏览器发送Selenium命令相对昂贵(至少25ms),并且可能在多次调用时变得非常重要.
两者都会产生完全相同的结果,最终会在浏览器端调用相同的API.
归档时间: |
|
查看次数: |
393 次 |
最近记录: |