问题 如何点击量角器中的隐藏元素?


我有一个元素,只有当我将鼠标悬停在它上面时才可见。

我已经编写了以下代码来覆盖面板,以便元素可见。

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:元素不可见 量角器中的错误。

基本情况是,我想将鼠标悬停在一个面板上,然后单击隐藏元素,因为该元素在悬停之前是不可见的。


1547
2018-03-08 04:31


起源

不能发表我的回答,没有声誉去做。无论如何找到了答案。下面的代码为我工作后,伙计们有了答案 - 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.css('i.ng-scope.tea-ic-sorting')).then(function(elm){ elm[0].click(); }); - Piyush Jajoo
我投了你的问题,我想你现在可以把它作为一个答案。我很惊讶StackOverflow上没有重复。这是一个经常出现的问题。 ;) 祝你好运! - glepretre
谢谢。我现在将此作为答案。 - Piyush Jajoo


答案:


有时候,有些情况下你有意想点击一个隐藏的元素。


一种选择是点击 通过javascript

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

也可以看看: WebDriver click()vs JavaScript click()


另一个,到 使元素可见 然后单击它。现在,这取决于元素的隐藏方式 - 用a 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());

6
2018-01-19 13:58



第一个选项工作正常。我进行了一些已经有效的测试,但是有些同事改变了样式,并且由于一些奇怪的原因,我的代码无法再单击复选框,即使它们完全可见。谢谢! - Óscar Palacios
如果它设置为type =“hidden”,是否会有一个可以覆盖它的executeScript? - Jeremy Kahan
@JeremyKahan你,你可以做到 arguments[0].setAttribute('type', 'text'); - alecxe
所以我试过,但是我得到的参数[0]是未定义的,即使在它之间的一行之后在EC.presenceOf(elm)上执行了browser.wait - Jeremy Kahan
选项1不会给出关于选项2没有参数的错误,也没有说明量角器点击与不可见的东西进行交互的问题,但也没有给出填充实际点击在现实生活中所做的基础菜单选项的结果会话。 - Jeremy Kahan


以下代码为我工作。

  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();
    });

5
2018-03-11 09:48



我试过这个但仍然有 "Element is not currently visible and may not be manipulated" - BradGreens
这意味着您无法将鼠标悬停在元素上... - Piyush Jajoo
这是可以忍受的。适用于Chrome和FireFox,但我试图强制点击PhantomJS,这对隐藏的元素真的不满意。 Safari也有鼠标功能的错误 - code.google.com/p/selenium/issues/detail?id=4136 - BradGreens
对此不能感谢你,我一直在走错路,试图让这个点击执行超过24小时,这个悬停方法第一次完美运行。谢谢! - parchambeau