Ответ 1
Это довольно распространенная проблема автоматизации тестирования с селеном.
Вот общие решения:
- убедитесь, что элемент, который вы хотите щелкнуть, действительно отображается. Иногда вам нужно сделать дополнительные действия на странице, чтобы сделать элемент видимым. Например, откройте раскрывающийся список для появления опции или откроется меню для подменю, которое будет отображаться
-
wait для visibility элемента:
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();
-
Или, если у вас есть несколько элементов, соответствующих одному и тому же локатору, вы можете "filter" из видимого элемента:
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();