微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Selenium C# 注册字段密码输入验证

如何解决Selenium C# 注册字段密码输入验证

我目前正在编写一个自动化测试来验证哪个密码正确,哪个不正确。 循环一直运行,直到随机字符串密码正确并且没有 passwordMustBeValid.displayed 时,每当我尝试放置 if (passwordMustBeValid.displayed == false) 我得到过时的元素引用:元素未附加到页面文档。这是显而易见的,因为列表中的密码之一是正确的,并且不再显示该元素。

运行密码循环的正确语法是什么,直到正确的密码输入有效,然后代码继续运行而不会出现过时的元素错误

My Current code:
List <string> passwords = new List <string> (){String.sevenUpperChars,String.sevenLowerChars,String.seveNumeralChars,String.CorrectPassword};
var registration = driver.FindElement(WebObjects.registrationButton);
            registration.Click();

            var email = driver.FindElement(WebObjects.email);
            email.SendKeys(emailAcc);

            var phone = driver.FindElement(WebObjects.phone);
            phone.SendKeys(StringChain.phoneNumber);

            var password = driver.FindElement(WebObjects.password);
            password.SendKeys(StringChain.sevenChars);

            var passwordRepeat = driver.FindElement(WebObjects.repeatPassword);
            passwordRepeat.SendKeys(StringChain.sevenChars);

            var checkBox = driver.FindElement(WebObjects.checkBox);
            checkBox.Click();

            var register = driver.FindElement(WebObjects.registerButton);
            register.Click(); TimeSpan.FromSeconds(5);
            var passwordMustBeValid = driver.FindElement(WebObjects.passwordMustBeValid);
            Assert.IsTrue(passwordMustBeValid.displayed);
            foreach (var passwordLoop in passwords)
            {
                password.SendKeys(Keys.Control + "a");
                password.SendKeys(Keys.Delete);
                password.SendKeys(passwordLoop);
                passwordRepeat.SendKeys(Keys.Control + "a");
                passwordRepeat.SendKeys(Keys.Delete);
                passwordRepeat.SendKeys(passwordLoop);
                register.Click();

                if (!passwordMustBeValid.displayed) /// OpenQA.Selenium.StaleElementReferenceException : stale element reference: element is not attached to the page document
                {
                 var emailsent = driver.findElement(Webobjects.emailSentAlert);
                 Assert.IsTrue(emailSent.displayed);
                    break;
                }

            }

        }
    }
}


解决方法

我不确定这在 C# 语法方面是否正确,因为我无法使用给定的数据编译它:

想法是将每个密码放在一个列表中,对于列表中的每个字符串(密码),执行代码直到找到值

 List <string> passwords = new List <string> (){String.sevenUpperChars,String.sevenLowerChars,String.seveNumeralChars};

 var correctPassword;
 foreach(var password in passwords) {
   password.SendKeys(Keys.Control + "a");
   password.SendKeys(Keys.Delete);
   password.SendKeys(password);
   passwordRepeat.SendKeys(Keys.Control + "a");
   passwordRepeat.SendKeys(Keys.Delete);
   passwordRepeat.SendKeys(password);
   register.Click();

   if (passwordMustBeValid.Displayed == false) {
     correctPassword = password;    
     break;
   }

 }
,

设法设置成这样

            {
                password.SendKeys(Keys.Control + "a");
                password.SendKeys(Keys.Delete);
                password.SendKeys(passwordLoop);
                passwordRepeat.SendKeys(Keys.Control + "a");
                passwordRepeat.SendKeys(Keys.Delete);
                passwordRepeat.SendKeys(passwordLoop);
                register.Click();

                Thread.Sleep(2000);

                Assert.IsTrue(passwordMustBeValid.Count > 0);

                if (passwordMustBeValid.Count <= 0)
                {
                    Thread.Sleep(4000);
                    break;
                }
            }
            var emailSent = driver.FindElement(WebObjects.emailSent);
            Assert.IsTrue(emailSent.Displayed);
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。