我已经在一个函数中执行了一些量角器脚本,并且该函数正在for循环中调用。因此,如果发生任何错误,例如找不到元素,元素无法处理,WebDriverError:发生未知错误:元素不可单击,则我需要跳过该循环计数,而需要执行下一个循环计数。我尝试使用isPresent(),isDisplayed()捕获错误,但无法正常工作,然后尝试使用以下代码。
for(i=0; i<count; i++){
post(post_details[i].MediaUrl,post_details[i].CallToActionType,post_details[i].LPAID,post_details[i].CallToActionUrl);
}
post((MediaUrl,CallToActionType,LPAID,CallToActionUrl){
element(by.css(locators.locator_post_description)).sendKeys(Summary).then (function(){
if(MediaUrl!=null){
var path = require('path');
var type=MediaUrl.split("/");
var fileToUpload = '../files/' + (type[type.length-1]) ;
var absolutePath = path.resolve(__dirname, fileToUpload);
browser.sleep(3000);
element(by.css(locators.locator_post_img)).sendKeys(absolutePath);
browser.sleep(6000);
}
if(CallToActionType!=null){
browser.sleep(1000);
element(by.css(locators.locator_post_eventPostButton)).click();
browser.sleep(2000);
element(by.cssContainingText(locators.locator_post_buttonType,CallToActionType)).click();
browser.sleep(1000);
element(by.css(locators.locator_post_eventPostButtonLInk)).sendKeys(CallToActionUrl);
}
element(by.xpath(locators.locator_post_publishBtn)).click().then (function(){
browser.sleep(3000);
updatedb(LPAID);
});
},function(err) {
console.log("no summary...."+err);
return true;
});
}
在这里我从DB获取值(MediaUrl,CallToActionType,LPAID),我正在检查其值不为null。通过使用上面的代码,我能够捕获与description元素相关的错误,然后从该循环中退出计数并执行下一个循环计数。但是我无法对图像元素,按钮类型元素,按钮链接元素使用此错误捕获方法。因此,如何捕获与每个定位器元素相关的错误(如果有)以及是否存在错误发生,然后跳过该循环计数。谢谢。
答案 0 :(得分:1)
量角器具有内置的“预期条件”,通过该条件,您可以使用browser.wait()处理问题。请参考下面的代码和链接:
var EC = protractor.ExpectedConditions;
var button = $('#xyz');
var isClickable = EC.elementToBeClickable(button);
browser.get(URL);
browser.wait(isClickable, 5000); //wait for an element to become clickable
button.click();
文档-https://www.protractortest.org/#/api?view=ProtractorExpectedConditions