From 8b74067a10bb25229db4c4c0d6598aaef505d392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tommy=20=C3=96man?= Date: Thu, 3 Feb 2022 23:03:04 +0100 Subject: [PATCH] Status page can be shown , a lot of refactoring is still required --- BrowserHelper/BrowserHelper.csproj | 3 + BrowserHelper/Driver/BrowserDriver.cs | 12 +++- .../Extensions/HtmlTableExtension.cs | 18 ++--- StockDAL/StockDAL.csproj | 1 + StockDAL/StockMarketRepository.cs | 69 ++++++++++++++++++- StockDAL/StockScrapePage.cs | 68 ++++++++++++++++++ StockDal.Interface/IStockScrapePage.cs | 12 ++++ StockInfoCore/StockInfoDISetup.cs | 5 +- 8 files changed, 175 insertions(+), 13 deletions(-) create mode 100644 StockDAL/StockScrapePage.cs create mode 100644 StockDal.Interface/IStockScrapePage.cs diff --git a/BrowserHelper/BrowserHelper.csproj b/BrowserHelper/BrowserHelper.csproj index 974a7c8..0809928 100644 --- a/BrowserHelper/BrowserHelper.csproj +++ b/BrowserHelper/BrowserHelper.csproj @@ -11,4 +11,7 @@ + + + diff --git a/BrowserHelper/Driver/BrowserDriver.cs b/BrowserHelper/Driver/BrowserDriver.cs index d83aaed..3f042e9 100644 --- a/BrowserHelper/Driver/BrowserDriver.cs +++ b/BrowserHelper/Driver/BrowserDriver.cs @@ -10,19 +10,27 @@ public class BrowserDriver : IBrowserDriver public IWebDriver GetChromeDriver(bool headless = true) { new DriverManager().SetUpDriver(new ChromeConfig()); + var chromdriverservice = ChromeDriverService.CreateDefaultService(); + chromdriverservice.HideCommandPromptWindow = true; ChromeOptions options = new ChromeOptions(); if (headless) + { options.AddArguments("--headless"); - return new ChromeDriver(options); + } + return new ChromeDriver(chromdriverservice, options); } public IWebDriver GetFirefoxDriver(bool headless = true) { new DriverManager().SetUpDriver(new FirefoxConfig()); + var firefoxdriverservice = FirefoxDriverService.CreateDefaultService(); + firefoxdriverservice.HideCommandPromptWindow = true; FirefoxOptions options = new FirefoxOptions(); if (headless) + { options.AddArguments("--headless"); - return new FirefoxDriver(options); + } + return new FirefoxDriver(firefoxdriverservice, options); } } diff --git a/BrowserHelper/Extensions/HtmlTableExtension.cs b/BrowserHelper/Extensions/HtmlTableExtension.cs index 2ecf248..e6989e4 100644 --- a/BrowserHelper/Extensions/HtmlTableExtension.cs +++ b/BrowserHelper/Extensions/HtmlTableExtension.cs @@ -1,4 +1,5 @@ -using OpenQA.Selenium; +using DataDomain; +using OpenQA.Selenium; using System; using System.Collections; using System.Collections.Generic; @@ -68,9 +69,10 @@ namespace BrowserHelper.Extensions } colIndex++; } - rowIndex++; antal--; } + + rowIndex++; if (antal < 1) break; } return tableDataCollection; @@ -129,12 +131,12 @@ namespace BrowserHelper.Extensions } - public static List GetCertainStocks(this IWebElement element, string[] shares, string[] shareHeaders) + public static List GetCertainStocks(this IWebElement element, string[] shares, string[] shareHeaders) { - List shareList = new List(); + List shareList = new List(); var reducedList = ReadTablePartly(element, shares, shareHeaders); int rNr = -1; - Share Aktie = null; + DiTraderStockRow Aktie = null; foreach (var shareRow in reducedList) { if (shareRow.RowNumber != rNr) @@ -150,17 +152,17 @@ namespace BrowserHelper.Extensions { case "Aktie": { - Aktie.AktieNamn = shareRow.ColumnValue; + Aktie.StockName = shareRow.ColumnValue; break; } case "Senast": { - Aktie.SenastePris = Convert.ToDecimal(shareRow.ColumnValue); + Aktie.LatestPrice = Convert.ToDecimal(shareRow.ColumnValue); break; } case "Tid": { - Aktie.RegTime = TimeOnly.Parse(shareRow.ColumnValue); + Aktie.TimeOfDay = TimeSpan.Parse(shareRow.ColumnValue); break; } } diff --git a/StockDAL/StockDAL.csproj b/StockDAL/StockDAL.csproj index f8fd2f1..46fc85e 100644 --- a/StockDAL/StockDAL.csproj +++ b/StockDAL/StockDAL.csproj @@ -14,6 +14,7 @@ + diff --git a/StockDAL/StockMarketRepository.cs b/StockDAL/StockMarketRepository.cs index 4d55163..5b96c10 100644 --- a/StockDAL/StockMarketRepository.cs +++ b/StockDAL/StockMarketRepository.cs @@ -12,6 +12,8 @@ using System.Threading.Tasks; using System.Reflection; using System.Diagnostics; using StockDAL.Interface; +using BrowserHelper.Driver; +using BrowserHelper.Settings; namespace StockDal { @@ -27,12 +29,20 @@ namespace StockDal public IWebDriver driver; private readonly IStockPersonConnect _stockPersonConnect; private readonly IStockRepository _stockRepository; + private readonly TestSettings _testSettings; + private readonly IStockScrapePage _scrapePage; - public StockMarketRepository(IStockPersonConnect stockPersonConnect, IStockRepository stockRepository ) + public StockMarketRepository( + IStockPersonConnect stockPersonConnect, + IStockRepository stockRepository, + TestSettings testSettings, + IStockScrapePage scrapePage) { ViewBrowser = false; _stockPersonConnect = stockPersonConnect; _stockRepository = stockRepository; + _testSettings = testSettings; + _scrapePage = scrapePage; } private void Find_Data() @@ -206,6 +216,31 @@ namespace StockDal } + private void saveStockData(List saveRow) + { + foreach(var row in saveRow) + { + try + { + StockMarketList.Add(row.StockName, row); + } + catch (ArgumentException) + { + try + { + StockMarketList.Add(row.StockName + "-2", row); + } + catch (Exception) + { + DumpObjects.Add(row); + } + + } + //break; + } + } + + public void LoadStockMarketList(int persId) { StockMarketList = new Dictionary(); @@ -214,6 +249,38 @@ namespace StockDal //var connStocks = _stockPersonConnect.GetAllConnectionsByPersId(persId); var groupedStocks = _stockRepository.GetStocksGroupedPerPerson(persId); + var lastGroup = string.Empty; + var stockList = new List(); + foreach(var groupedStock in groupedStocks) + { + if (groupedStock.StockGroup != lastGroup) + { + if(lastGroup != string.Empty) + { + _testSettings.StockWishes = stockList.ToArray(); + stockList.Clear(); + saveStockData( _scrapePage.GetMyStockStatus(lastGroup)); + lastGroup = groupedStock.StockGroup; + } + else + { + lastGroup = groupedStock.StockGroup; + } + + stockList.Add(groupedStock.StockId); + } + else + { + stockList.Add(groupedStock.StockId); + } + } + + if(stockList.Count > 0) + { + _testSettings.StockWishes = stockList.ToArray(); + stockList.Clear(); + saveStockData(_scrapePage.GetMyStockStatus(lastGroup)); + } //OpenBrowser(null); //Find_Data(); diff --git a/StockDAL/StockScrapePage.cs b/StockDAL/StockScrapePage.cs new file mode 100644 index 0000000..c383804 --- /dev/null +++ b/StockDAL/StockScrapePage.cs @@ -0,0 +1,68 @@ +using BrowserHelper.Driver; +using BrowserHelper.Extensions; +using BrowserHelper.Settings; +using DataDomain; +using OpenQA.Selenium; +using StockDAL.Interface; + +namespace StockDAL +{ + + public class StockScrapePage : IStockScrapePage + { + private readonly IWebDriver _driver; + private readonly TestSettings _testSettings; + + public StockScrapePage(IDriverFixture driver, TestSettings testSettings) + { + _driver = driver.Driver; + _testSettings = testSettings; + } + + //IWebElement lnkProduct => _driver.FindElement(By.LinkText("Product")); + //IWebElement lnkCreate => _driver.FindElement(By.LinkText("Create")); + //IWebElement tblList => _driver.FindElement(By.CssSelector(".table")); + + + IWebElement tblList => _driver.FindElement(By.ClassName("millistream-list-table")); + IWebElement chooseList => _driver.FindElement(By.Id("listselect")); + + public List GetMyStockStatus(string listText) + { + Thread.Sleep(500); + chooseList.SelectDropDownByText(listText); + Thread.Sleep(3000); + var stockList = tblList.GetCertainStocks(_testSettings.StockWishes, _testSettings.StocWishCols); + //foreach (var stock in stockList) + //{ + // Console.WriteLine($"Aktie: {stock.StockName} Senastepris: {stock.LatestPrice} TidPunkt {stock.TimeOfDay}"); + //} + return stockList; + } + + public void GetStocksPerList(string listText) + { + Thread.Sleep(500); + chooseList.SelectDropDownByText(listText); + Thread.Sleep(3000); + var stocklist = tblList.ReadHandledStock(); + string result = string.Empty; + foreach (var stock in stocklist) + { + result += $"{listText}: {stock.ColumnValue} {System.Environment.NewLine}"; + } + File.WriteAllText($"Aktier_{listText}.txt", result); + } + + //public void CreateProduct() + //{ + // lnkProduct.Click(); + // lnkCreate.Click(); + //} + + public void PerformClickOnSpecialValue(string name, string operation) + { + tblList.PerformActionOnCell("1", "Aktie", name, operation); + } + } +} diff --git a/StockDal.Interface/IStockScrapePage.cs b/StockDal.Interface/IStockScrapePage.cs new file mode 100644 index 0000000..2149b5a --- /dev/null +++ b/StockDal.Interface/IStockScrapePage.cs @@ -0,0 +1,12 @@ +using DataDomain; + +namespace StockDAL.Interface +{ + public interface IStockScrapePage + { + List GetMyStockStatus(string listText); + void GetStocksPerList(string listText); + void PerformClickOnSpecialValue(string name, string operation); + } + +} diff --git a/StockInfoCore/StockInfoDISetup.cs b/StockInfoCore/StockInfoDISetup.cs index 93ed2d9..d2add6e 100644 --- a/StockInfoCore/StockInfoDISetup.cs +++ b/StockInfoCore/StockInfoDISetup.cs @@ -31,8 +31,9 @@ namespace StockInfoCore services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + services.AddSingleton(); + services.AddSingleton(); + services.AddTransient(); services.AddTransient(); services.AddTransient();