gpt4 book ai didi

java - 构建对象列表时仅检索某些属性

转载 作者:行者123 更新时间:2023-12-01 19:17:41 25 4
gpt4 key购买 nike

我最近从 C# 切换到 Java,但无法解决这个问题。我是使用 selenium 的自动化 UI。我喜欢为页面上的元素列表构建模型,检索属性,然后使用这些属性。在下面的示例中,我在 amazon.com 上搜索并获取结果列表。我有SearchResultsModel代表返回的每个项目的类,public List<SearchResultModel> GetAllResults(bool title = false;bool isPrime = false;bool price = false)从 UI 检索数据并将其放置在我的模型中的方法,它具有默认参数,允许我操纵我想要检索的数据,而不是检索所有内容。然后我通过List<SearchResultModel> actual = myPage.GetAllResults(title:true,isPrime:true);调用在本例中,我得到一个 SearchResultsModel 列表,每个列表仅包含 2 个属性 - title 和 isPrime。

在理想的情况下,我应该从页面中检索所有数据,但这需要花费大量时间,并且违背了自动化比手动测试更快的整个目的。

我可以使用方法重载,但最终我会得到数十甚至数百个方法。在这个例子中,我只有 3 个属性,所以最终会有 9 个方法,如果一个对象有 10 个属性,我恐怕甚至无法进行数学计算。我可以使用 varagrs,但是建立一个论证就会变得一团糟。我不知道如何在 Java 中解决这个问题。请指教

public class SearchResultsModel
{
//model that represents a single search result item
public string Title{get;set;}
public boolean IsPrime{get;set;}
public float Price {get;set;]

}


//method to retrieve all the search results from UI
public List<SearchResultModel> GetAllResults(bool title = false;bool isPrime = false;bool price = false)
{
List<SearchResultModel> toReturn = new List<SearchResultModel>();
IList<IWebElement> results = driver.FindElements(By.css("my locattors"))

foreach(IWebElement element in results)
{
SearchResultModel result = new SearchResultModel();
result.Title = title? element.FindElement(By.css("some locator")).GetText(): null;
result.IsPrime = isPrime? element.FindElement(By.css("some locator")).Selected(): false;
result.Price = price? element.FindElement(By.css("some locator")).GetText(): null;
toReturn.Add(result);
}

return toReturn;
}

//this is how I can invoke objects only with a specific properties

List<SearchResultModel> actual = myPage.GetAllResults(title:true,isPrime:true);

foreach(SearchResultModel model in actual)
{
Assert.That(model.isPrime == true);
}

最佳答案

我将构建一个类来表示您想要搜索的选项。它基本上与您的 SearchResultsModel 类似。您将该类的实例传递到 GetAllResults 方法中,然后检查每个属性的值以查看是否应该提取它。

选项类的示例

public class SearchResultsOptions
{
public boolean Title{get;set;}
public boolean IsPrime{get;set;}
public boolean Price {get;set;]
...
}

GetAllResults 方法的改编版本

public List<SearchResultModel> GetAllResults(SearchResultsOptions searchResultsOptions)
{
List<SearchResultModel> toReturn = new List<SearchResultModel>();
IList<IWebElement> results = driver.FindElements(By.css("my locattors"))

foreach(IWebElement element in results)
{
SearchResultModel result = new SearchResultModel();
result.Title = searchResultsOptions.Title? element.FindElement(By.css("some locator")).GetText(): null;
result.IsPrime = searchResultsOptions.IsPrime? element.FindElement(By.css("some locator")).Selected(): false;
result.Price = searchResultsOptions.Price? element.FindElement(By.css("some locator")).GetText(): null;
// add more fields here

toReturn.Add(result);
}

return toReturn;
}

您必须实例化选项类,然后将其传递给您的方法

SearchResultsOptions searchResultsOptions = new SearchResultsOptions(true, false, true);
List<SearchResultModel> searchResultsModel = GetAllResults(searchResultsOptions);

关于java - 构建对象列表时仅检索某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59400160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com