我想测试我的应用是否滚动到线程页面内的特定帖子。
最初我认为isDisplayed
可能会有所帮助,并编码如下:
element(by.id(postId)).isDisplayed().then((isDisplayed) => {
expect(isDisplayed).toBe(true);
});
仔细阅读documentation后,isDisplayed
不检查元素是否在视口内。
一种hacky方式是计算各种元素的位置,从可滚动的父级开始(在我的情况下不是window
)。
检查这个是否有最佳做法?
答案 0 :(得分:2)
第一个想法(您提到):
getBoundingClientMyRect
创建功能getBoundingClientRect
getWindowMyRect
创建函数(0, 0, wWidth, wHeight)
let wHeight = window.innerHeight || document.documentElement.clientHeight;
let wWidth = window.innerWidth || document.documentElement.clientWidth;
isInsideMyRect
-基于https://gist.github.com/davidtheclark/5515733 isPartOfMyRect
-基于https://gist.github.com/davidtheclark/5515733#gistcomment-2113166 el.getWindowMyRect().isInsideMyRect(getWindowMyRect())
此方法不能解决页面内的内部滚动问题
次主意:
elm.getBoundingClientRect()
并记下值browser.executeScript("arguments[0].scrollIntoViewIfNeeded();", elm.getWebElement());
elm.getBoundingClientRect()
-再次与先前的值进行比较(如果该值已更改,则需要滚动)