2015-09-07 67 views
1

我使用硒來測試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之前和之後的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)); 

我使用也試過ExpectedConditions的sooooooo多種組合SelectElement但無濟於事。

如果我調試我的方式,一切都很棒,很棒。沒有錯誤。但是當我運行測試時,有時它通過其他時間失敗。我找不到任何系統關於哪些字段失敗。它是隨機的...

當我從本地機器運行測試時,我沒有任何問題。但是從DEV中的機器運行時,它們偶爾會失敗。 DEV-machine比本地功能弱,這使我認爲這可能是一個計時問題。也許Selenium正在打字速度讓瀏覽器跟上。

我使用Nunit作爲測試框架。用ReSharper。

任何幫助或方向將不勝感激。謝謝你們

+0

在的TypeText,試着鍵入它時讀回元素,看它是否符合。 – stark

+0

@stark。謝謝。我做到了。如果他們不匹配,你會怎麼做?我試着再次輸入_exact_相同的東西。但同樣的行爲:(aaaawwwwww – terle

+0

如果它們不符合你期望的和你得到的結果,那應該告訴你什麼是錯誤的。 – stark

回答

0

我認爲可能會有計時問題。如果超時,那麼增加您發出的超時時間,然後再次運行,並檢查DEV機器中是否有失敗的測試天氣。

增加超時。試試這個...

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

參考 - http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp

+0

我增加了implicitwait的超時時間,但沒有變化,我很害怕 – terle