2014-04-28 126 views
2

我有一個方法,我希望能夠返回IWebElements的列表,只列出元素或字符串數​​組的名稱。是否有可能用一種方法返回多個數據類型?有沒有一種更可行的方法來獲得不同的返回類型而不使用一種方法?如何返回多個數據類型

/// <summary> 
/// Gets all options belonging to this selected tag 
/// </summary> 
/// <returns>Returns a list of IWebElements</returns> 
public List<IWebElement> SelectAllOptions(IWebDriver driver, ref DataObject masterData) 
{ 
    //Get the ID of the dropdown menu 
    DatabaseRetrieval.GetObjectRepository(ref masterData); 
    var strDropMenuId = masterData.DictObjectRepository["ID"]; 
    //Find the dropdown menu and pull all options into a list 
    try 
    { 
     var dropMenu = new SelectElement(driver.FindElement(By.Id(strDropMenuId))); 
     return dropMenu.Options as List<IWebElement>; 
    } 
    catch (NoSuchElementException exception) 
    { 
     masterData.Logger.Log(Loglevel.Error, "Boom: {0}", exception.Message); 
    } 
    masterData.Logger.Log(Loglevel.Debug, "No options found for DropDownMenu: {0}", strDropMenuId); 
    return null; 
} 
+3

雖然你可以** **使用'Object'作爲返回值,我不要認爲這是一個好主意 - 它有點擊敗了強大的打字。 –

回答

1

您可以返回類型更改爲

Dictionary<IWebElement, string> 

一旦編譯IWebElements列表中,那麼你可以簡單地添加與IWebElement關聯的字符串轉換成字典返回 - 誰調用你的方法將有IWebElement和字符串進行處理。

var options = dropMenu.Options as List<IWebElement>; 
if (options != null) 
{ 
    var values = options.ToDictionary(option => option, option => option.Text); 
    return values; 
} 
+1

這適用於我想要做的事 –

9

您不能返回多個類型。但是,您可以:

  1. 創建一個包含所有可能的返回類型
  2. 使用。NET的Tuple代替
  3. 有出參數的類型。

但這是一個非常糟糕的設計決定,你應該真的考慮避免它。 (這通常意味着你的方法做更多比它應該)

+0

我之前從來沒有聽說過這個元組,並且喜歡它的靈活性,但我真正需要的是IWebElement和名稱,以便字典能夠工作。 –

+0

@ ma3str0我會在字典前使用一個元組,因爲字典意味着散列映射,這不是真正的重點。 – i3arnon

+0

@ ma3str0我認爲你真正想要的是一對(它基本上是一個2元組的元組) – i3arnon

2

是,但你必須使用out PARAMATERS像下面

public List<IWebElement> SelectAllOptions(IWebDriver driver, ref DataObject masterData, out SomeType returnResult1, out SomeType returnResult2)