【问题标题】:How to click an element that is blocked in protractor?如何单击量角器中被阻止的元素?
【发布时间】:2020-09-16 06:12:18
【问题描述】:
我正在尝试单击一个按钮,但有时会在此按钮前面弹出一个弹出窗口,并且我的自动化脚本无法告诉我该元素已被拦截且不可单击,我有一个向下滚动到该元素的功能,但仍然如此其他元素在前面,有没有办法解决这个阻塞元素?
我可以尝试操作,但这在 FireFox 中不起作用,因为它不受支持,任何想法如何创建一个函数来“圆形”元素以确保没有其他元素阻止它?
【问题讨论】:
标签:
javascript
selenium
automation
protractor
【解决方案1】:
首先,直接回答您的问题。使用这个java脚本点击
/**
* Clicks on passed element by injecting js click() in the context of window
* @param {ElementFinder} $element Locator of element
* @return {Promise}
*/
let jsClick = $element =>
return browser.executeScript(
'arguments[0].click();', $element.getWebElement()
);
它的作用 - 当你调用函数并传递一个元素时,它会将 js 代码注入浏览器的控制台。此代码定位您的元素并执行点击。重要的区别是它会点击元素而不管布局或可见性,所以不要在测试中过度使用它,因为它不是真正的用户行为
另外,什么元素阻挡了你的按钮?我遇到过很多次,第三方集成会弹出一些随机弹出窗口,而您无法控制这些元素。我所做的,它总是有效的,我也在通过在浏览器中注入一些代码来删除该集成。但是它们的代码都不同,因此您需要对此进行研究。例子在这里
https://stackoverflow.com/a/59039308/9150146
【解决方案2】:
每当弹出窗口出现时,使用 browser.driver.switchTo().alert().dismiss(); 关闭 javascript 弹出窗口,然后继续自动化。