我有一个方法,我希望能够返回一个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;
}
答案 0 :(得分:9)
您无法返回多种类型。但是你可以:
Tuple
代替但这是一个非常糟糕的设计决定,你应该考虑避免它。 (这通常意味着你的方法比它应该做的更多)
答案 1 :(得分:2)
是,但你必须使用out参数,如下所示
public List<IWebElement> SelectAllOptions(IWebDriver driver, ref DataObject masterData, out SomeType returnResult1, out SomeType returnResult2)
答案 2 :(得分:1)
您可以将返回类型更改为
Dictionary<IWebElement, string>
一旦你编译了IWebElements列表,你就可以简单地将带有IWebElement的相关字符串添加到Dictionary中以返回 - 无论谁调用你的方法都将同时拥有IWebElement和字符串进行处理。
var options = dropMenu.Options as List<IWebElement>;
if (options != null)
{
var values = options.ToDictionary(option => option, option => option.Text);
return values;
}