在 xcode 8 中登录的 UI 测试

Posted

技术标签:

【中文标题】在 xcode 8 中登录的 UI 测试【英文标题】:UITesting for login in xcode8 【发布时间】:2016-12-20 10:48:46 【问题描述】:

我正在使用 UITesting,因为我必须使用保存的 NSUserDefaults 值来测试电子邮件字段和密码。请给我一些代码。

注意:1.检查电子邮件和密码字段是否有效或无效或为空。

【问题讨论】:

你有电子邮件和密码字段验证码吗?? 是的,但是验证是在 uitesting 中完成的。 【参考方案1】:

使用以下代码从文本字段中获取文本并验证它们。

 let app = XCUIApplication()
        let nameTextField = app.textFields.element(boundBy: 0)

        // based on index you can get text field.

        nameTextField.typeText("userName")

        let passwordTextField = app.textFields.element(boundBy: 1)

        // it returns the password field.

        passwordTextField.typeText("password")

        let userName : String = nameTextField.value

        // returns the text in text field.

        let password : String = passwordTextField.value

        if userName.isEmpty || password.isEmpty 

            print("Text fields are empty");

        
        else 

            let validateButton = app.buttons.element(boundsBy: 0)

            validateButton.tap()

        

如果存在任何警报,请稍后检查条件。如果存在您的信用卡错误。否则等待下一个 XCUIElement。使用此代码等待

 let existsPredicate = NSPredicate(format: "exists == true")
    expectation(for: existsPredicate,
                evaluatedWith: element, handler: nil)
    waitForExpectations(timeout: 20, handler: nil)

【讨论】:

Reddy,你的答案是我的答案,但我试过了,它有问题,你能指导我吗.....【参考方案2】:
@interface NSString (emailValidation) 
  - (BOOL)isValidEmail;
@end

实现

@implementation NSString (emailValidation)
-(BOOL)isValidEmail

  BOOL stricterFilter = NO; // Discussion http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
  NSString *stricterFilterString = @"^[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]2,4$";
  NSString *laxString = @"^.+@([A-Za-z0-9-]+\\.)+[A-Za-z]2[A-Za-z]*$";
  NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
  NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
  return [emailTest evaluateWithObject:self];

@end

密码验证

-(void)textFieldDidEndEditing:(UITextField *)textField
   int numberofCharacters = 0;
   BOOL lowerCaseLetter,upperCaseLetter,digit,specialCharacter = 0;
   if([textField.text length] >= 10)
   
      for (int i = 0; i < [textfield.text length]; i++) 
      
         unichar c = [textfield.text characterAtIndex:i];
         if(!lowerCaseLetter)
         
           lowerCaseLetter = [[NSCharacterSet lowercaseLetterCharacterSet] characterIsMember:c];
         
         if(!upperCaseLetter)
         
           upperCaseLetter = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:c];
         
         if(!digit)
         
            digit = [[NSCharacterSet decimalDigitCharacterSet] characterIsMember:c];
         
         if(!specialCharacter)
         
            specialCharacter = [[NSCharacterSet symbolCharacterSet] characterIsMember:c];
         
      

      if(specialCharacter && digit && lowerCaseLetter && upperCaseLetter)
      
         //do what u want
      
      else
       
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Please Ensure that you have at least one lower case letter, one upper case letter, one digit and one special character"
                                                       delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
      

   
   else
   
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Please Enter at least 10 password"
                                                       delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
   

【讨论】:

,感谢您的出色回答,但我的要求不是这个。【参考方案3】:

在 NSUserDefaults 中存储电子邮件和密码:

[[NSUserDefaults standardUserDefaults] setObject:@"sam.martin105@gmail.com" forKey:@"Email"];
[[NSUserDefaults standardUserDefaults] setObject:@"123456Sam@" forKey:@"Password"];

电子邮件验证:

-(BOOL)NSStringIsValidEmail:(NSString *)checkString

    BOOL stricterFilter = NO;
    NSString *stricterFilterString = @"^[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]2,4$";
    NSString *laxString = @"^.+@([A-Za-z0-9-]+\\.)+[A-Za-z]2[A-Za-z]*$";
    NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailTest evaluateWithObject:checkString];

强密码验证:

- (BOOL)strongPassword:(NSString *)yourText

    BOOL strongPwd = YES;

    //Checking length
    if([yourText length] < 8)
        strongPwd = NO;

    //Checking uppercase characters
    NSCharacterSet *charSet = [NSCharacterSet uppercaseLetterCharacterSet];
    NSRange range = [yourText rangeOfCharacterFromSet:charSet];
    if(range.location == NSNotFound)
        strongPwd = NO;

    //Checking lowercase characters
    charSet = [NSCharacterSet lowercaseLetterCharacterSet];
    range = [yourText rangeOfCharacterFromSet:charSet];
    if(range.location == NSNotFound)
        strongPwd = NO;

    //Checking special characters
    charSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
    range = [yourText rangeOfCharacterFromSet:charSet];
    if(range.location == NSNotFound)
        strongPwd = NO;

    return strongPwd;

检查验证电子邮件或密码,如果成功则登录,否则您可以显示警报:

-(IBAction)Login:(id)sender

    NSString *Email = [[NSUserDefaults standardUserDefaults]objectForKey:@"Email"];
    NSString *Password = [[NSUserDefaults standardUserDefaults]objectForKey:@"Password"];

    BOOL flagEmail,flagPassword = false;

    if(![Email isEqualToString:@""])
    
        flagEmail = [self NSStringIsValidEmail:Email];
        if(flagEmail)
        
            NSLog(@"Email is accepted");
        
        else
        
            NSLog(@"Email is not valid");
        
    
    else
    
        NSLog(@"Email is empty");
    

    if(![Password isEqualToString:@""])
    
        flagPassword = [self strongPassword:Password];
        if(flagPassword)
        
            NSLog(@"Password is accepted");
        
        else
        
            NSLog(@"Password is not valid");
        
    
    else
    
        NSLog(@"Password is empty");
    

    if(flagEmail && flagPassword)
    
         NSLog(@"Email and password both are valid and not empty");
    

【讨论】:

请阅读我的问题并回答这不是我的要求,我必须验证 UITesting 中的电子邮件和密码文本字段。 在我的项目中,我必须编写一个测试用例来验证文本字段 我认为这个链接会对你有所帮助:***.com/questions/23613698/… 感谢@amit_donga 我检查了那个链接,这很有用,如果我得到一段代码来处理这个操作就足够了,非常感谢。

以上是关于在 xcode 8 中登录的 UI 测试的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 11.1 尝试在 Safari 浏览器的登录屏幕中记录以编写 UI 测试时崩溃

如何在 Xcode UI 测试中获得授权部分

使用 arc4random 生成随机数以添加到字符串以进行 UI 测试登录 xcode UI 测试

Xcode 7 UI 测试顺序

Xcode 在尝试进行涉及 web 视图的 UI 测试时崩溃

线程 1:在 XCODE 中测试 FB 登录时出现 SIGABRT 错误