Как нажимать на скрытый элемент в транспортире?

У меня есть элемент, который виден только тогда, когда я навис над ним.

Я написал следующий код для перемещения по панели, чтобы этот элемент был виден.

ptor.actions().
            mouseMove(ptor.findElement(protractor.By.xpath('//*[@id="productapp"]/div/div/div[2]/div/div/div/div[2]/div/div/div/div[4]/table/thead/tr/th[2]'))).
            perform();
        ptor.element.all(by.tagName('i')).then(function(elm){
            elm[0].click();
        });

Теперь я попытался щелкнуть по нему, но он говорит -   ElementNotVisibleError: элемент невидим ошибка в транспортире.

Основной сценарий: я хочу нависнуть над панелью, а затем щелкнуть по скрытому элементу, потому что элемент невидим, пока он не зависнет.

Ответ 1

Следующий код работал у меня.

  ptor.actions().
    mouseMove(ptor.findElement(protractor.By.xpath('//*@id="productapp"]/div/div/di‌​v[2]/div/div/div/div[2]/div/div/div/div[4]/table/thead/tr/th[2]'))).perform();

   ptor.element.all(by.css('i.ng-scope.tea-ic-sorting')).then(function(elm){
       elm[0].click();
    });

Ответ 2

Иногда случаются случаи, когда вы намеренно хотите щелкнуть скрытый элемент.


Один из вариантов - щелкнуть по javascript:

var elm = element(by.id("myid"));
browser.executeScript("arguments[0].click();", elm.getWebElement());

См. также: Щелкните по WebDriver() и нажмите JavaScript()


Другой, чтобы сделать элемент видимым и щелкнуть по нему. Теперь это зависит от того, как был скрыт элемент - с помощью style.block или style.visibility или с помощью ng-hide и т.д. Пример решения, в котором мы установили элемент visibility в visible и display в block:

var elm = element(by.id("myid"));
browser.executeScript(function (arguments) {
    arguments[0].style.visibility = 'visible'; 
    arguments[0].style.display = 'block';
}, elm.getWebElement());