angularjs - 检查元素是否可见,然后执行下面的代码 - Jasmine JS

标签 angularjs node.js selenium-webdriver jasmine protractor

我尝试添加“if”语句,以防 if 元素在 DOM 中可见,执行下面的代码,否则跳过“if”语句并继续运行下一个“it” block 。

有一个错误:

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>

这是 Protractor 的错误:

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)

最佳答案

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

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

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

关于angularjs - 检查元素是否可见,然后执行下面的代码 - Jasmine JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30328333/

相关文章:

javascript - 将 JQuery 插件变成 AngularJS 指令?

javascript - 使用 AngularJS 中的表单对 ControllerAs 进行单元测试

html - 使用 AngularJS 在网页中显示 XML 数据

node.js - 尝试通过dockerize一个node.js文件但不断出错

java - org.openqa.selenium.SessionNotCreatedException : session not created exception from tab crashed error when executing from Jenkins CI server

javascript - 为什么这些 AngularJS 组件之一成功显示了 ng-model 的值,而另一个却没有?

javascript - Node.js 中依赖于版本的类型继承

node.js - 如何在aws sqs Node js中接收消息

html - Jsoup 没有选择脚本标签

java - Junit 5 - 没有为参数注册 ParameterResolver