【问题标题】:Check if element is visible and than do the code below - Jasmine JS检查元素是否可见,而不是下面的代码 - Jasmine JS
【发布时间】:2015-07-31 10:35:06
【问题描述】:

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

有一个错误:

视图未在 [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>

这是量角器的错误:

错误:在 C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1630:20 在 [object Object] 处等待超时 10009 毫秒.promise.ControlFlow.runInFrame_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1877:20) 在 [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) 在 [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) 在 [object Object].promise .Promise.notifyAll_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-w ebdriver\lib\webdriver\promise.js:552:16) 在 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) 在 [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) 在 [object Object]。 (c:\automation\tests\messageNewClient.js:11:13) 在 C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\jasminewd\index.js:94:14 在 [object Object] .promise.ControlFlow.runInFrame_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1877:20) 在 [object Object].promise。 ControlFlow.runEventLoop_ (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1755:8) 在 [object Object]。 (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:2056:12) 在 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) 来自:任务:异步测试函数: it() 在 [object Object]。 (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\jasminewd\index.js:93:33) 在 [object Object]。 (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\async-callback.js:45:37) 在 [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) 在 [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) 在 [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) 在 [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) 在 [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) 在 onComplete (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasmin enode\lib\jasmine-1.3.1.js:2205:18) 在 [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) 在 [object Object].onComplete (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1. js:2504:10)==== 异步任务 ==== [object Object] 处出错。 (c:\automation\tests\messageNewClient.js:7:3) 在 [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) 在 [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) 在描述 (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:658:27) 在对象. (c:\automation\tests\messageNewClient.js:1:63) 在 Module._compile (module.js:460:26) 在 Object.Module._extensions..js (module.js:478:10) 在模块。在 Function.Module._load (module.js:310:12) 处加载 (module.js:355:32)

【问题讨论】:

    标签: angularjs node.js selenium-webdriver jasmine protractor


    【解决方案1】:

    我有一个类似的问题,我解决了这个问题,可能对你有帮助::::

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

    【讨论】:

      【解决方案2】:

      如果你不想抛出错误信息,那么你可以使用 failed promise 来处理如下:

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

      【讨论】:

        【解决方案3】:

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

        var EC = protractor.ExpectedConditions;
        var elm = element(by.binding('new_message'));
        
        browser.wait(EC.presenceOf(elm), 5000);
        

        【讨论】:

        • 谢谢我的朋友,但可能不是这种情况。我已经尝试过了,现在错误是关于“错误:5023 毫秒后等待超时”,我已经尝试使用更大的超时,但它也没有帮助.. :/ @alecxe
        猜你喜欢
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 2021-02-19
        • 2012-07-08
        • 2013-11-09
        • 2017-04-25
        相关资源
        最近更新 更多