2015-05-19 57 views
1

我试图添加“如果”语句的情况下,如果元素是在DOM中可见做下面的代码,否则跳过“if”语句和继续运行下一个“it”块。检查元素是否可见,并执行下面的代码 - Jasmine JS

有大约一个错误:

view is not defined at [object Object].

请您帮助!

代码:

describe('LiveSite Portal - New client send new message', function() { 

    it('LiveSite - Home Page', function() { 
     liveSiteHome(); 
    }); 

    it('LiveSite - Logged out', function() { 

    var EC = protractor.ExpectedConditions; 

    browser.wait(EC.visibilityOf(element(by.binding('new_message'))), 10000); 

    var forgetMe = expect(element(by.name('new_message')).isPresent()).toBe(true); 

    if (forgetMe === true) { 
     element(by.css("a.forget-me ng-binding")).click(); 
     browser.driver.sleep(5000); 
    } 
    else { 
     browser.driver.sleep(1000); 
    } 

    }); 

    it('LiveSite - Click on leave a message', function() { 
    element(by.xpath("//div[@class='actions-row']//a[.='Leave Your Details']")).click(); 
    browser.driver.sleep(3000); 

    expect(element(by.id("new_client_message_message")).isPresent()).toBe(true); 

    captureScreen("clientNewMessage"); 
    browser.driver.sleep(3000); 
    }); 
     }); 

这是应该是可见的元素:

<div class="row form-control textarea-holder ng-isolate-scope" ng-show="client" vc-animate-active="sendMessageActive"> 
     <textarea ng-attr-placeholder="{{&quot;client_zone.navigation.write_your_message&quot; | t}}" ng-attr-rows="{{(show_promotional_link &amp;&amp; actions.length > 3)? 2 : 4}}" ng-model="new_message" vc-focus="sendMessageActive" class="ng-isolate-scope ng-pristine ng-valid" placeholder="Write a new message" rows="4"></textarea> 
     <div class="cf"> 
     <button class="btn btn-account-action btn-with-font-icon icon-env live-button brand-theme ng-binding" ng-bind="&quot;client_zone.navigation.reply&quot; | t" ng-disabled="sending" type="submit">Send</button> 
     <input class="btn btn-void btn-default" ng-click="$state.go(&quot;main&quot;)" type="button" value="Cancel"> 
     </div> 
    </div> 

这是从量角器错误:

Error: Wait timed out after 10009ms at C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1630:20 at [object Object].promise.ControlFlow.runInFrame_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1877:20) at [object Object].promise.Callback_.goog.defineClass.notify (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:2464:25) at [object Object].promise.Promise.notify_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:563:12) at Array.forEach (native) at Object.goog.array.forEach (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\array\array.js:203:43) at [object Object].promise.Promise.notifyAll_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:552:16) at goog.async.run.processWorkQueue (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:125:21) at runMicrotasksCallback (node.js:337:7) at process._tickCallback (node.js:355:11) From: Task: at [object Object].promise.ControlFlow.wait (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1617:15) at [object Object].webdriver.WebDriver.wait (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:714:21) at [object Object].to.(anonymous function) [as wait] (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\lib\protractor.js:63:25) at [object Object]. (c:\automation\tests\messageNewClient.js:11:13) at C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\jasminewd\index.js:94:14 at [object Object].promise.ControlFlow.runInFrame_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1877:20) at [object Object].promise.ControlFlow.runEventLoop_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1755:8) at [object Object]. (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:2056:12) at goog.async.run.processWorkQueue (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:125:21) at runMicrotasksCallback (node.js:337:7) From: Task: Asynchronous test function: it() at [object Object]. (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\jasminewd\index.js:93:33) at [object Object]. (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\async-callback.js:45:37) at [object Object].jasmine.Block.execute (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:1174:17) at [object Object].jasmine.Queue.next_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2209:31) at [object Object].jasmine.Queue.start (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2162:8) at [object Object].jasmine.Spec.execute (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2503:14) at [object Object].jasmine.Queue.next_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2209:31) at onComplete (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2205:18) at [object Object].jasmine.Spec.finish (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2477:5) at [object Object].onComplete (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2504:10)==== async task ==== Error at [object Object]. (c:\automation\tests\messageNewClient.js:7:3) at [object Object].jasmine.Env.describe_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:913:21) at [object Object].jasmine.Env.describe (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:898:15) at describe (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:658:27) at Object. (c:\automation\tests\messageNewClient.js:1:63) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12)

回答

0

你需要让protractor在继续测试规范流程之前知道您想要wait until the element becomes present,例如:

var EC = protractor.ExpectedConditions; 
var elm = element(by.binding('new_message')); 

browser.wait(EC.presenceOf(elm), 5000); 
+0

谢谢我的朋友,但它不是这种情况下,可能。 我试过这个,现在错误是关于“错误:等待超时5023ms后”,我已经尝试使用更大的超时时间,但它也没有帮助..:/ @alecxe –

0

我有一个类似的问题,我解决了它的一些怎么这个样子,可能这可以帮助你::::

element(by.name('new_message')).isPresent().then(function(present){ 
    if(present == true){} 
    else{} 
}); 
0

如果你不想抛出错误信息,那么你可以使用失败承诺处理如下:

return browser.driver.wait(EC.presenceOf(elm), timeout).then(null, function() { 
    output.log('isElementPresent: elm not present'); 
    browser.sleep(1000); 
    return false; 
}); 
相关问题