Selenium C# 注册字段密码输入验证
Selenium C# register field password input validation
我目前正在编写一个自动化测试来验证哪个密码正确,哪个密码不正确。
循环 运行s 直到随机字符串密码正确并且没有 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);
}
}
}
我目前正在编写一个自动化测试来验证哪个密码正确,哪个密码不正确。 循环 运行s 直到随机字符串密码正确并且没有 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);
}
}
}