public void HappyPath(string doubleString, double expectedOutput) { var test = new ConvertToDouble(); var result = test.DoConversion(doubleString); Assert.AreEqual(expectedOutput, result); Assert.IsInstanceOf <double>(result); }
public static int Main() { ConvertToDouble ac = new ConvertToDouble(); TestLibrary.TestFramework.BeginTestCase("Convert.ToDouble(...)"); if (ac.RunTests()) { TestLibrary.TestFramework.EndTestCase(); TestLibrary.TestFramework.LogInformation("PASS"); return(100); } else { TestLibrary.TestFramework.EndTestCase(); TestLibrary.TestFramework.LogInformation("FAIL"); return(0); } }
public async Task <List <ProductDetails> > ScrapeWebsiteAsync(string siteUrl) { List <ProductDetails> products = new List <ProductDetails>(); if (siteUrl.Contains("?sort=")) { Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] A ordenar os produtos do mais popular para menos popular:", Program.M_Options.StyleConsole); siteUrl = siteUrl.Substring(0, siteUrl.IndexOf("?")); } //Use the default configuration for AngleSharp var config = Configuration.Default.WithDefaultLoader(); //Create a new context for evaluating webpages with the given config var context = BrowsingContext.New(config); Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Começa", Program.M_Options.StyleConsole); IDocument document = await context.OpenAsync(siteUrl); //var butttonToSort = document.QuerySelector(".select-dropdown").ChildNodes.OfType<IHtmlAnchorElement>().FirstOrDefault(); //string buttonToSortValue = butttonToSort.ChildNodes.OfType<IHtmlSpanElement>().Select(m => m.TextContent).FirstOrDefault(); // Se não está ordenado do mais popular para o menos popular //butttonToSort.DoClick(); //var sortByPopularity = document.QuerySelector(".select-dropdown").ChildNodes.GetElementsByTagName("dd").FirstOrDefault().GetElementsByTagName("ul").FirstOrDefault().ChildNodes.OfType<IHtmlAnchorElement>().FirstOrDefault(); //string html = sortByPopularity.InnerHtml; // Enquanto podemos navegar entre as páginas int counterPopularity = 1; while (true) { Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Página: {NumberPage}", Program.M_Options.StyleConsole); // DIV completo para cada produto IHtmlCollection <IElement> pricesListItemsLinq = document.QuerySelectorAll("div.product-item"); foreach (var div in pricesListItemsLinq) { ProductDetails product = new ProductDetails(); var itemName = div.QuerySelector("a.product-item-name"); // Nome do Produto product.ProductName = itemName.GetAttribute("title"); // Link do produto no Kuanto Kusta if (itemName.GetAttribute("href") == "#") { string onClickAttribute = itemName.GetAttribute("onclick"); string encodedURL = onClickAttribute.Substring(onClickAttribute.IndexOf(@"'"), onClickAttribute.LastIndexOf(@"'") - onClickAttribute.IndexOf(@"'")); string decodedURL = Uri.UnescapeDataString(encodedURL); product.WebsiteUrl = decodedURL.Substring(1, decodedURL.IndexOf(@",") - 2); } else { product.WebsiteUrl = "https://www.kuantokusta.pt" + itemName.GetAttribute("href"); } // ID do produto (KuantoKusta) product.ProductId = itemName.ChildNodes.OfType <AngleSharp.Html.Dom.IHtmlSpanElement>().FirstOrDefault().GetAttribute("data-id"); // Link da Imagem de Perfil product.ImageLink = div.QuerySelector("img.img-responsive").GetAttribute("src"); if (product.ImageLink.Contains("kuantokusta") == false) { product.ImageLink = div.QuerySelector("img.img-responsive").GetAttribute("data-src"); } // Marca product.Brand = div.QuerySelector("div.product-item-value").ChildNodes.OfType <AngleSharp.Html.Dom.IHtmlAnchorElement>().Select(m => m.TextContent).FirstOrDefault(); // Node do Preco var priceNode = div.QuerySelector("a.product-item-price"); // Conteúdo to preco para formatar var priceTextContent = priceNode.ChildNodes.OfType <AngleSharp.Html.Dom.IHtmlSpanElement>().Select(m => m.TextContent).FirstOrDefault(); // Preco formatado em string string priceString = priceTextContent.Substring(0, priceTextContent.IndexOf("€")); // Preco em double product.CurrentPrice = ConvertToDouble.StringPriceToDouble(priceString); product.Popularity = counterPopularity++; products.Add(product); } Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Lidos {products.Count} produtos", Program.M_Options.StyleConsole); if ((document = await NavigateToNextPage(document)) == null) { NumberPage = 1; return(products); } // Temos todos os produtos da página para formatar para dados funcionais } }