首页 文章

检查元素是否可见,而不是下面的代码 - Jasmine JS

提问于
浏览
1

我试图添加“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>

这是量角器的错误:

错误:等待超时10009ms后,在C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ webdriver \ promise.js:1630:20 at [object Object] .promise . [Object Object] .promise.Callback_中的.ControlFlow.runInFrame_(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ webdriver \ dev.js:1877:20) . [object object] .promise.Promise上的goog.defineClass.notify(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ webdriver \ dev.:sm:244:25)在Object.goog的Array.forEach(native)处的.notify(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ webdriver \ promise.js:563:12) . 在[object Object] .promise.Promise上的array.forEach(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ goog \ array \ array.js:203:43) .notifyAll(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-we goog.async.run.processWorkQueue(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ goog \)中的bdriver \ lib \ webdriver \ promise.js:552:16) async \ run.js:125:21)at processMicrotasksCallback(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 \ dev.js:1617:15)at [object Object] .webdriver.WebDriver.wait(C:\用户\ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ webdriver \ webdriver.js:714:21)at [object Object] .to . (匿名函数)[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)在[object Object]的C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ jasminewd \ index.js:94:14 [object object] .promise上的.promise.ControlFlow.runInFrame(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ webdriver \ promise.js:1877:20) . 在[object Object]处的ControlFlow.runEventLoop(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ webdriver \ promise.js:1755:8) . goog.async.run.processWorkQueue(C:\ Users \)中的(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ webdriver \ promise.js:2056:12) 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 :[object object]的it() . (对象对象)上的(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ jasminewd \ index.js:93:33) . (对象对象) . (对象对象) . (j:\ n) \ 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)atComplete(C:\ Users \ idan \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ minijasmin) enode \ 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)在[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 ==== [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)在[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)at Object . (C:\ automation \ tests \ messageNewClient.js:1:63)在Module的Object.Module._extensions..js(module.js:478:10)的Module._compile(module.js:460:26)处 . 在Function.Module._load上加载(module.js:355:32)(module.js:310:12)

3 回答

  • 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

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

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

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

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

相关问题