Status page can be shown , a lot of refactoring is still required

This commit is contained in:
2022-02-03 23:03:04 +01:00
parent b776847980
commit 8b74067a10
8 changed files with 175 additions and 13 deletions

View File

@ -11,4 +11,7 @@
<PackageReference Include="Selenium.WebDriver" Version="4.1.0" /> <PackageReference Include="Selenium.WebDriver" Version="4.1.0" />
<PackageReference Include="WebDriverManager" Version="2.12.3" /> <PackageReference Include="WebDriverManager" Version="2.12.3" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DataDomain\DataDomain.csproj" />
</ItemGroup>
</Project> </Project>

View File

@ -10,19 +10,27 @@ public class BrowserDriver : IBrowserDriver
public IWebDriver GetChromeDriver(bool headless = true) public IWebDriver GetChromeDriver(bool headless = true)
{ {
new DriverManager().SetUpDriver(new ChromeConfig()); new DriverManager().SetUpDriver(new ChromeConfig());
var chromdriverservice = ChromeDriverService.CreateDefaultService();
chromdriverservice.HideCommandPromptWindow = true;
ChromeOptions options = new ChromeOptions(); ChromeOptions options = new ChromeOptions();
if (headless) if (headless)
{
options.AddArguments("--headless"); options.AddArguments("--headless");
return new ChromeDriver(options); }
return new ChromeDriver(chromdriverservice, options);
} }
public IWebDriver GetFirefoxDriver(bool headless = true) public IWebDriver GetFirefoxDriver(bool headless = true)
{ {
new DriverManager().SetUpDriver(new FirefoxConfig()); new DriverManager().SetUpDriver(new FirefoxConfig());
var firefoxdriverservice = FirefoxDriverService.CreateDefaultService();
firefoxdriverservice.HideCommandPromptWindow = true;
FirefoxOptions options = new FirefoxOptions(); FirefoxOptions options = new FirefoxOptions();
if (headless) if (headless)
{
options.AddArguments("--headless"); options.AddArguments("--headless");
return new FirefoxDriver(options); }
return new FirefoxDriver(firefoxdriverservice, options);
} }
} }

View File

@ -1,4 +1,5 @@
using OpenQA.Selenium; using DataDomain;
using OpenQA.Selenium;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
@ -68,9 +69,10 @@ namespace BrowserHelper.Extensions
} }
colIndex++; colIndex++;
} }
rowIndex++;
antal--; antal--;
} }
rowIndex++;
if (antal < 1) break; if (antal < 1) break;
} }
return tableDataCollection; return tableDataCollection;
@ -129,12 +131,12 @@ namespace BrowserHelper.Extensions
} }
public static List<Share> GetCertainStocks(this IWebElement element, string[] shares, string[] shareHeaders) public static List<DiTraderStockRow> GetCertainStocks(this IWebElement element, string[] shares, string[] shareHeaders)
{ {
List<Share> shareList = new List<Share>(); List<DiTraderStockRow> shareList = new List<DiTraderStockRow>();
var reducedList = ReadTablePartly(element, shares, shareHeaders); var reducedList = ReadTablePartly(element, shares, shareHeaders);
int rNr = -1; int rNr = -1;
Share Aktie = null; DiTraderStockRow Aktie = null;
foreach (var shareRow in reducedList) foreach (var shareRow in reducedList)
{ {
if (shareRow.RowNumber != rNr) if (shareRow.RowNumber != rNr)
@ -150,17 +152,17 @@ namespace BrowserHelper.Extensions
{ {
case "Aktie": case "Aktie":
{ {
Aktie.AktieNamn = shareRow.ColumnValue; Aktie.StockName = shareRow.ColumnValue;
break; break;
} }
case "Senast": case "Senast":
{ {
Aktie.SenastePris = Convert.ToDecimal(shareRow.ColumnValue); Aktie.LatestPrice = Convert.ToDecimal(shareRow.ColumnValue);
break; break;
} }
case "Tid": case "Tid":
{ {
Aktie.RegTime = TimeOnly.Parse(shareRow.ColumnValue); Aktie.TimeOfDay = TimeSpan.Parse(shareRow.ColumnValue);
break; break;
} }
} }

View File

@ -14,6 +14,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\BrowserHelper\BrowserHelper.csproj" />
<ProjectReference Include="..\DataDomain\DataDomain.csproj" /> <ProjectReference Include="..\DataDomain\DataDomain.csproj" />
<ProjectReference Include="..\DatamodelLibrary\DatamodelLibrary.csproj" /> <ProjectReference Include="..\DatamodelLibrary\DatamodelLibrary.csproj" />
<ProjectReference Include="..\StockDal.Interface\StockDAL.Interface.csproj" /> <ProjectReference Include="..\StockDal.Interface\StockDAL.Interface.csproj" />

View File

@ -12,6 +12,8 @@ using System.Threading.Tasks;
using System.Reflection; using System.Reflection;
using System.Diagnostics; using System.Diagnostics;
using StockDAL.Interface; using StockDAL.Interface;
using BrowserHelper.Driver;
using BrowserHelper.Settings;
namespace StockDal namespace StockDal
{ {
@ -27,12 +29,20 @@ namespace StockDal
public IWebDriver driver; public IWebDriver driver;
private readonly IStockPersonConnect _stockPersonConnect; private readonly IStockPersonConnect _stockPersonConnect;
private readonly IStockRepository _stockRepository; 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; ViewBrowser = false;
_stockPersonConnect = stockPersonConnect; _stockPersonConnect = stockPersonConnect;
_stockRepository = stockRepository; _stockRepository = stockRepository;
_testSettings = testSettings;
_scrapePage = scrapePage;
} }
private void Find_Data() private void Find_Data()
@ -206,6 +216,31 @@ namespace StockDal
} }
private void saveStockData(List<DiTraderStockRow> 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) public void LoadStockMarketList(int persId)
{ {
StockMarketList = new Dictionary<string, DiTraderStockRow>(); StockMarketList = new Dictionary<string, DiTraderStockRow>();
@ -214,6 +249,38 @@ namespace StockDal
//var connStocks = _stockPersonConnect.GetAllConnectionsByPersId(persId); //var connStocks = _stockPersonConnect.GetAllConnectionsByPersId(persId);
var groupedStocks = _stockRepository.GetStocksGroupedPerPerson(persId); var groupedStocks = _stockRepository.GetStocksGroupedPerPerson(persId);
var lastGroup = string.Empty;
var stockList = new List<string>();
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); //OpenBrowser(null);
//Find_Data(); //Find_Data();

View File

@ -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<DiTraderStockRow> 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);
}
}
}

View File

@ -0,0 +1,12 @@
using DataDomain;
namespace StockDAL.Interface
{
public interface IStockScrapePage
{
List<DiTraderStockRow> GetMyStockStatus(string listText);
void GetStocksPerList(string listText);
void PerformClickOnSpecialValue(string name, string operation);
}
}

View File

@ -31,8 +31,9 @@ namespace StockInfoCore
services.AddTransient<IAddressRepository,AddressRepository>(); services.AddTransient<IAddressRepository,AddressRepository>();
services.AddTransient<IStockPersonConnect,StockPersonConnect>(); services.AddTransient<IStockPersonConnect,StockPersonConnect>();
services.AddTransient<IPersonStockFacade,PersonStockFacade>(); services.AddTransient<IPersonStockFacade,PersonStockFacade>();
services.AddTransient<IBrowserDriver, BrowserDriver>(); services.AddSingleton<IBrowserDriver, BrowserDriver>();
services.AddTransient<IDriverFixture, DriverFixture>(); services.AddSingleton<IDriverFixture, DriverFixture>();
services.AddTransient<IStockScrapePage, StockScrapePage>();
services.AddTransient<frmBackup>(); services.AddTransient<frmBackup>();
services.AddTransient<frmRegisterStock>(); services.AddTransient<frmRegisterStock>();