我有一个带有十字图标的按钮,我要单击它。下面是我的量角器代码:
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
<span _ngcontent-c5="">×</span>
</li>
`enter code here`</ul>
答案 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);
当您不想知道某物是否可见并且不想单击某个元素时也可以使用它(无需向下滚动页面直至可见)。另一方面,请不要完全依赖它,因为点击点击是用户界面验证的一部分