我使用硒來測試webapp。 它與添加公告/數據有關。它有很多的輸入...Webdriver在錯誤的輸入元素中輸入錯誤的文本
問題:隨機地,文本-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
public void TypeName(string name)
{
TypeText(name, _nameInputLocator);
}
類型名實施例調用從一個超類通用TypeText方法。
protected void TypeText(string text, By locator)
{
Webdriver.FindElement(locator).SendKeys(text);
}
類型AnnouncementAdvertiserFields
是特定類型公告的頁面對象頁面上的屬性。
我試過使用隱式等待和顯式等待。隨着
TextToBePresentInElement
之前和之後的SendKeysElementExists
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));
我使用也試過ExpectedConditions的sooooooo多種組合SelectElement
但無濟於事。
如果我調試我的方式,一切都很棒,很棒。沒有錯誤。但是當我運行測試時,有時它通過其他時間失敗。我找不到任何系統關於哪些字段失敗。它是隨機的...
當我從本地機器運行測試時,我沒有任何問題。但是從DEV中的機器運行時,它們偶爾會失敗。 DEV-machine比本地功能弱,這使我認爲這可能是一個計時問題。也許Selenium正在打字速度讓瀏覽器跟上。
我使用Nunit作爲測試框架。用ReSharper。
任何幫助或方向將不勝感激。謝謝你們
在的TypeText,試着鍵入它時讀回元素,看它是否符合。 – stark
@stark。謝謝。我做到了。如果他們不匹配,你會怎麼做?我試着再次輸入_exact_相同的東西。但同樣的行爲:(aaaawwwwww – terle
如果它們不符合你期望的和你得到的結果,那應該告訴你什麼是錯誤的。 – stark