无法单击元素,量角器控制台中未显示任何错误

时间:2018-11-15 09:00:23

标签: javascript xpath protractor

我有一个带有十字图标的按钮,我要单击它。下面是我的量角器代码:

browser.sleep(5000);
removepersona.isPresent().then(function(displayed){
if(displayed){
removepersonaval.click();

其中元素的xpath是:

button: var removepersona= element(by.css('ul[class="tags"] li'));
cross icon: var removepersonaval= element(by.css('ul[class="tags"] li 
span'));

这是HTML代码:

<ul _ngcontent-c5="" class="tags">
<!----><li _ngcontent-c5="">BIKER&nbsp;
<span _ngcontent-c5="">×</span>
</li>
`enter code here`</ul>

2 个答案:

答案 0 :(得分:0)

定位器看起来不错。

执行console.log并检查是否displayed is true

removepersona.isPresent().then(function(displayed){
  if(displayed) {
  console.log("displayed"); 
     removepersonaval.click();
  }else{
     console.log("Not displayed"); 
  }  
})

答案 1 :(得分:0)

我知道问题出在哪里!即使您可以看到该按钮,实际的clickable元素的大小也可能是0 px,而量角器仅在尺寸大于0的可见元素上单击。

因此,您需要使用JS脚本。在您的代码中定义此操作

    /**
     *  Clicks on passed element by injecting js click() in the context of window
     *  @param {ElementFinder}      $element                        Locator of element
     *  @param {number}             [timeout=timeouts.ms1000]       Time in ms (med. is 1000ms)
     *  @return {promise.Promise}
     */
    jsClick: ($element, timeout = timeouts.ms1000) =>
        browser.wait(
            protractor.ExpectedConditions.presenceOf($element),
            timeout,
            "waitThenClickScript on " + $element.locator()
        ).then(() => browser.executeScript(
            "arguments[0].click();",
            $element.getWebElement()
        ))

它将等待elem的出现,然后在浏览器控制台中注入代码以单击elem。所以就做

jsClick(removepersona);

当您不想知道某物是否可见并且不想单击某个元素时也可以使用它(无需向下滚动页面直至可见)。另一方面,请不要完全依赖它,因为点击点击是用户界面验证的一部分