我正在使用 selenium 来测试网络应用程序。 它与添加公告/数据有关。它有很多输入...
问题:随机地,用于输入 A 的文本 A 被输入输入 B 以及文本 B。
由于有很多重复,我从 xml 中读取文本输入并返回一个字典。并这样输入文本
public AnnouncementAdvertiserFields TypeAdvertiserFields(string pathToXml)
{
var xmlParser = new XmlParser();
Dictionary<string, string> fields = xmlParser.TypeAdvertiserFieldsFromXml(pathToXml);
string name;
string coAddress;
string streetName;
string streetNo;
string streetFloor;
string streetDoor;
string city;
string postalCode;
string postalCity;
string phoneNo;
string mobileNo;
string faxNo;
string country;
string journalNo;
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.Name, out name);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.CoAdress, out coAddress);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.Streetname, out streetName);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.StreetNumber, out streetNo);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.StreetFloor, out streetFloor);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.StreetDoor, out streetDoor);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.City, out city);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.PostalCode, out postalCode);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.PostalCity, out postalCity);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.PhoneNumber, out phoneNo);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.MobilePhoneNumber, out mobileNo);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.FaxNumber, out faxNo);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.Country, out country);
fields.TryGetValue(WebTesting.Common.Constants.AdvertiserFieldNames.JounalNo, out journalNo);
if (name != string.Empty) TypeName(name);
if (coAddress != string.Empty) TypeCoAddress(coAddress);
if (streetName != string.Empty) TypeStreetName(streetName);
if (streetNo != string.Empty) TypeStreetNumber(streetNo);
if (streetFloor != string.Empty) TypeStreetFloor(streetFloor);
if (streetDoor != string.Empty) TypeStreetDoor(streetDoor);
if (city != string.Empty) TypeCity(city);
if (postalCode != string.Empty) TypePostalCode(postalCode);
if (postalCity != string.Empty) TypePostalCity(postalCity);
if (phoneNo != string.Empty) TypePhoneNumber(phoneNo);
if (mobileNo != string.Empty) TypeMobilePhoneNumber(mobileNo);
if (faxNo != string.Empty) TypefaxNumber(faxNo);
if (country != string.Empty) SelectCountryByValue(country);
if (journalNo != string.Empty) TypeJournalNumber(journalNo);
return this;
}
来自 AnnouncementAdvertiserFields
的 TypeName 示例
public void TypeName(string name)
{
TypeText(name, _nameInputLocator);
}
TypeName 从父类(super class)中调用泛型 TypeText 方法。
protected void TypeText(string text, By locator)
{
Webdriver.FindElement(locator).SendKeys(text);
}
类型AnnouncementAdvertiserFields
是特定公告类型的页面对象页面上的一个属性。
我试过同时使用隐式等待和显式等待。有太多的 ExpectedConditions 组合
TextToBePresentInElement
在 SendKeys 之前和之后ElementExists
ElementIsVisible
我认为这样的代码应该可以工作
var wait = new WebDriverWait(Webdriver, TimeSpan.FromSeconds(5));
wait.Until(ExpectedConditions.ElementIsVisible(locator));
var element = Webdriver.FindElement(locator);
element.Clear();
wait.Until(ExpectedConditions.TextToBePresentInElement(element, ""));
element.SendKeys(text);
Wait.Until(ExpectedConditions.TextToBePresentInElement(FindStdkElement(locator), text));
我也尝试过使用 SelectElement
但无济于事。
如果我通过调试,一切都非常棒。没有错误。但是当我运行测试时,有时它会通过,有时会失败。我找不到关于哪些字段失败的任何系统。这是随机的...
当我从我的本地机器运行测试时,我没有遇到任何问题。但是当从 DEV 中的机器运行时,它们偶尔会失败。 DEV-machine 不如本地强大,这让我认为这可能是一个时间问题。也许 Selenium 正在快速输入以让浏览器跟上。
我使用 Nunit 作为测试框架。使用 ReSharper。
如有任何帮助或指示,我们将不胜感激。谢谢大家
最佳答案
我认为可能存在时间问题。如果有超时,则增加您给定的超时时间,然后再次运行它并检查您的 DEV 机器中是否有失败的测试。
增加超时。试试这个...
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
引用 - http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp
关于c# - Webdriver 在错误的输入元素中输入了错误的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32439297/