在使用硒进行测试自动化中,这是一个相当普遍的问题。
以下是常见的解决方案:
- 确保要单击的元素实际上是可见的。有时,您需要在页面上执行其他操作以使元素可见。例如,打开下拉菜单以显示选项,或打开菜单以显示子菜单
等待 元素的可见性:
var EC = protractor.ExpectedConditions;
var mumbaiCity = element(by.id(‘mumbaiCity’));
browser.wait(EC.visibilityOf(mumbaiCity), 5000);
mumbaiCity.click();存在 的另一个元素 具有相同
id
,实际上是不可见的。在这种情况下,您需要改进定位器以匹配此特定元素。例如:element(by.css(".city-checkbox #mumbaiCity")).click();element(by.css(“.city-checkbox input[ng-click*=Mumbai]”)).click();
或者,如果你有多个元素匹配相同的定位-你可以“过滤”出了 可见的元素 :
var mumbaiCity = element.all(by.id('mumbaiCity')).filter(function (elm) {return elm.isDisplayed().then(function (isDisplayed) { return isDisplayed;});}).first();
mumbaiCity.click();移至元素,然后单击通过
browser.actions()
:var mumbaiCity = element(by.id('mumbaiCity'));browser.actions().mouseMove(mumbaiCity).click().perform();
滚动到该元素的视图,然后单击:
var mumbaiCity = element(by.id('mumbaiCity'));browser.executescript(“arguments[0].scrollIntoView();”, mumbaiCity.getWebElement());
mumbaiCity.click();通过javascript 点击请注意区别:
var mumbaiCity = element(by.id('mumbaiCity'));browser.executescript(“arguments[0].click();”, mumbaiCity.getWebElement());
有时,您只需要 最大化浏览器窗口即可 :
browser.driver.manage().window().maximize();



