angularjs - क्लिक करें() फ़ंक्शन प्रचलित लिपियों में काम नहीं कर रहा है




jasmine protractor (3)

इसके कई कारण हो सकते हैं और यह वैसे भी एक अनुमान लगाने वाला खेल है।

  • यह हो सकता है कि .login-button लोकेटर से मेल खाने वाला कोई दूसरा तत्व हो और आप एक भिन्न तत्व पर क्लिक कर रहे हों। लोकेटर में सुधार करें :

    element(by.css(".login-form .login-button")).click();
  • क्लिक करने योग्य तत्व के लिए प्रतीक्षा करें :

    var EC = protractor.ExpectedConditions;
    element(by.model('credentials.username')).sendKeys('RET02');
    element(by.model('credentials.password')).sendKeys('RET02');
    
    var loginButton = element(by.css('.login-form .login-button'));
    browser.wait(EC.elementToBeClickable(loginButton), 5000);
    loginButton.click();
  • तत्व पर क्लिक करने से पहले एक छोटी सी देरी जोड़ें (मूर्खतापूर्ण, लेकिन मुझे लगता है कि कभी-कभी मदद मिली):

    element(by.model('credentials.username')).sendKeys('RET02');
    element(by.model('credentials.password')).sendKeys('RET02');
    browser.sleep(500);
    element(by.css('.login-form .login-button')).click();
  • एक और मूर्खतापूर्ण कोशिश, 2 बार क्लिक करें (मुझे विश्वास नहीं हो सकता है कि मैं वास्तव में सलाह देता हूं):

    var loginButton = element(by.css('.login-form .login-button'));
    loginButton.click();
    loginButton.click();
  • कोणीय एनिमेशन अक्षम करें

  • browser.actions() माध्यम से बटन पर क्लिक करें। browser.actions() क्लिक करने से पहले एलिमेंट पर जाएं:

    var loginButton = element(by.css('.login-form .login-button'));
    browser.actions().mouseMove(loginButton).click().perform();
  • पिछले दृष्टिकोण के लिए एक विस्तार की तरह। तत्व पर जाएं, आधे सेकंड के लिए सोएं और फिर क्लिक करें:

    browser.actions.mouseMove(loginButton).perform();
    browser.sleep(500);
    loginButton.click();

    या, यदि आप एक कस्टम sleep() कार्रवाई शुरू करेंगे, तो आप कर सकते हैं:

    browser.actions.mouseMove(loginButton).sleep(500).click().perform();
  • जावास्क्रिप्ट के माध्यम से तत्व पर क्लिक करें:

    var loginButton = element(by.css('.login-form .login-button'));
    browser.executeScript("arguments[0].click();", loginButton);

और, फ़ॉर्म सबमिट होने के बाद, browser.sleep() बजाय, आप URL को स्पष्ट रूप से बदलने का इंतजार कर सकते हैं, कृपया देखें:

साइड नोट के रूप में, प्रोट्रैक्टर में, आप CSS लोकेटर के लिए $ और $$ शॉर्टकट का उपयोग करते हैं:

var loginButton = $('.login-form .login-button');

मैं iPad सिमुलेटर में चमेली ढांचे के साथ एक AngularJS साइट के लिए प्रोट्रैक्टर और अप्पियम के साथ अपने परीक्षणों को स्वचालित करने की कोशिश कर रहा हूं, Sendkeys sendkeys() फ़ंक्शन उपयोगकर्ता नाम और पासवर्ड के लिए काम कर रहा है, लेकिन जब मैं लॉगिन बटन पर क्लिक करता हूं तो परीक्षा पास हो जाती है, लेकिन कार्रवाई ऐसा नहीं किया गया है: होम पेज पर कोई पुनर्निर्देशन नहीं है, और लॉगिन बटन के लिए क्लिक प्रभाव नहीं दिखाया गया है, मुझे यकीन है कि तत्व सही तरीके से स्थित है! क्योंकि जब मैं गेटटेक्स्ट () से "लॉगिन" के बराबर होने की उम्मीद करता हूं, तो इसे पारित कर दिया जाता है, लेकिन अगर मैं browser.sleep(8000); डाल देता हूं तो भी कोई रीडायरेक्शन नहीं होता है browser.sleep(8000); यहाँ मेरी परीक्षण स्क्रिप्ट:

    "use strict";
    require("jasmine-expect");
    var wd = require("wd");
    describe('my app', function() {
    it('should make the login test',function() {

//    browser.ignoresynchronization=true;
    browser.get("http://10.0.22.82:8080/jws/fetablet");
    expect(browser.getCurrentUrl()).toEqual(("http://10.0.22.82:8080/jws/fetablet/#/login"));

    element(by.model('credentials.username')).sendKeys('RET02').then(function(){
    element(by.model('credentials.password')).sendKeys('RET02').then(function(){
    element(by.css('.login-button')).click().then(function(){
    browser.sleep(8000); expect(browser.getCurrentUrl()).not.toEqual("http://10.0.22.82:8080/jws/fetablet/#/login");
    });
    });
    });
});
});

क्या क्लिक बटन का सही तरीके से पता लगाने का एक और तरीका है? यहाँ मेरा HTML कोड है:

​​<div class="lo​​gin_lang"> <md-button class="lang_button" ng-click="changeLang()">{{lang}}</md-button> </div> 
<div layout="column" flex layout-align="center center" class="md-padding splash-background"> <div class="login-logo"> <img src="{{logoSrc}}"> </div> <form class="login-form" name="loginForm" ng-submit="login()"> 
<fieldset> <md-input-container class="md-block"> 
<label translate="login.USERNAME" ng-class="{'floating-label-rtl':dir==='rtl'}" 

class="login-label">Username</label> 
<input required ng-model="credentials.username" ng-focus="onFocus()" type="text"> 

<div ng-messages="loginForm.credentials.username.$error" ng-show="loginForm.credentials.username.$dirty"> 
<div ng-message="required" trans
​​late="login.MESSAGE_REQUIRED">This is required.</div> </div> </md-input-container> <md-input-container class="md-block"> <label ​​translate="login.PASSWORD" ng-class="{'floating-label-rtl':dir==='rtl'}" 


class="login-label">Password</label> <input required ng-model="credentials.password" ng-focus="onFocus()" type="pa
​​ssword"> 
<div ng-messages="loginForm.credentials.password.$error" ng-show="loginForm.credentials.password.$dirty"> <div ng-message="required" translate="login.MESSAGE_REQUIRED">This is required.</div> </div> </md-input-container> 

<div layout-align="center center" layout="column" ng-if="oneTimePassword"> <p class="login-otp-message" translate="login.OTP_MESSAGE">Enter the code which you received by SMS</p> <md-button class="md-warn login-otp-retry" translate="login.OTP_RETRY" ng-click="retry()">Retry</md-button> </div> <md-input-container class="md-block" ng-if="oneTimePassword"> <label translate="login.SECURITY_CODE" class="login-label">Security code</label> <input required ng-model="credentials.securityCode" ng-focus="onFocus()" type="password"> <div ng-messages="loginForm.credentials.securityCode.$error" ng-show="loginForm.credentials.securityCode.$dirty"> <div ng-message="required" translate="login.MESSAGE_REQUIRED">This is required.</div> </div> </md-input-container> <div layout-align="center"> <section layout-align="center" layout="row" layout-sm="column"> <div id="login-error" md-caption class="msg-error" ng-show="error" class="label">{{error}}</div>
​​

 <md-button type="submit" class="md-raised login-button" ng-disabled="clicked" translate="login.LOGIN">Login</md-button> </section>
​​
 </div> </fieldset> </form> <md-divider></md-divider> <footer class="login-footer"> <div layout="row" layout-align="center center"> <md-button ng-click="goToCustomerCare()" class="login-footer-link" translate="login.CUSTOMER_CARE">Contact Customer Care</md-button> <div> | </div> <md-button ng-click="showDisclaimer()" class="login-footer-link" translate="login.DISCLAIMER">Disclaimer</md-button> </div> </footer> </div>

मैंने लॉगिन बटन के बारे में Appium रिकॉर्डर का विवरण रखा


मेरे पास एक और सुझाव है, आप अपेक्षा कर सकते हैं कि विशेष तत्व को प्रदर्शित करने और पाठ-बॉक्स को साफ़ करने की आवश्यकता है। आप वास्तव में वादे में लिख सकते हैं, यह सबसे अच्छा तरीका है।

  var loginButton = element(by.css('.md-raised.login-button'));
  var userName = element(by.model('credentials.username'));
  var password = element(by.model('credentials.password'));

  this.username = function(sendUserName) {
      expect(userName.isDisplayed()).toBeTruthy();
      userName.clear().then(function(){
          userName.sendKeys(sendUserName).then(function(){
              expect(password.isDisplayed()).toBeTruthy();
          });
      });
  };

  this.password = function(password) {
      expect(password.isDisplayed()).toBeTruthy();
      password.clear().then(function(){
          password.sendKeys(password).then(function(){
              browser.wait(EC.elementToBeClickable(loginButton), 10000);
          });
      });
  };

  this.clickloginbutton = function() {
    expect(loginButton.isDisplayed()).toBeTruthy();
    loginButton.click().then(function(){
      expect('something').not.toBeNull();
    });
 }

वादा श्रृंखला का उपयोग किए बिना उन आदेशों को निष्पादित करने का प्रयास करें। यह पिछली श्रृंखला में एक समस्या हो सकती है।

"use strict";
require("jasmine-expect");
var wd = require("wd");
describe('my app', function() {
it('should make the login test',function() {
  browser.get("http://10.0.22.82:8080/jws/fetablet");
  expect(browser.getCurrentUrl()).toEqual(("http://10.0.22.82:8080/jws/fetablet/#/login"));
  element(by.model('credentials.username')).sendKeys('RET02');
  element(by.model('credentials.password')).sendKeys('RET02');
  element(by.css('.login-button')).click();
  browser.sleep(8000);   
  expect(browser.getCurrentUrl()).not.toEqual("http://10.0.22.82:8080/jws/fetablet/#/login");
});

पुनश्च: आप 'तब' फ़ंक्शन का उपयोग करने से बच सकते हैं जब आपको विधि के परिणाम का उपयोग करने की आवश्यकता नहीं होती है। यह नियंत्रण प्रवाह द्वारा नियंत्रित किया जाता है





end-to-end