Now even Pfizer. Inc. can be managed

This commit is contained in:
2022-02-08 23:50:25 +01:00
parent d56e69b448
commit f38824becf
4 changed files with 110 additions and 7 deletions

View File

@ -1,6 +1,8 @@
using DataDomain; using BrowserHelper.Settings;
using DataDomain;
using OpenQA.Selenium; using OpenQA.Selenium;
using System.Collections; using System.Collections;
using System.Collections.Generic;
namespace BrowserHelper.Extensions namespace BrowserHelper.Extensions
{ {
@ -73,7 +75,7 @@ namespace BrowserHelper.Extensions
return tableDataCollection; return tableDataCollection;
} }
public static List<DiTraderStockRow> SimpleReadTablePartly(this IWebElement table, string[] shares, string[] shareHeaders) public static List<DiTraderStockRow> SimpleReadTablePartlyOld(this IWebElement table, string[] shares, string[] shareHeaders)
{ {
var shareCollection = new List<DiTraderStockRow>(); var shareCollection = new List<DiTraderStockRow>();
var columns = table.FindElements(By.TagName("th")); var columns = table.FindElements(By.TagName("th"));
@ -114,6 +116,54 @@ namespace BrowserHelper.Extensions
return shareCollection; return shareCollection;
} }
public static List<DiTraderStockRow> SimpleReadTablePartly(this IWebElement table, string[] shares, string[] shareHeaders)
{
var shareSet = new HashSet<string>(shares);
var shareCollection = new List<DiTraderStockRow>();
var columns = table.FindElements(By.TagName("th"));
IWebElement tblBody = table.FindElement(By.XPath(".//tbody"));
var rows = tblBody.FindElements(By.TagName("tr"));
Dictionary<string, int> columnPos = new Dictionary<string, int>();
//GlobalStopwatch.PrintSecs("After allocations");
for (int i = 0; i < columns.Count; i++)
{
if (shareHeaders.Contains(columns[i].Text)) columnPos.Add(columns[i].Text, i);
}
//var antal = shares.Length;
int rowIndex = 0;
//GlobalStopwatch.PrintSecs("Before scraplooping");
foreach (var row in rows)
{
var element = row.FindElement(By.XPath(".//td"));
if (!shareSet.Contains(element.Text)) { }
else
{
var colDatas = row.FindElements(By.TagName("td"));
if (colDatas.Count != 0 && shares.Contains(colDatas[0].Text))
{
shareCollection.Add(new DiTraderStockRow
{
StockName = colDatas[columnPos["Aktie"]].Text,
LatestPrice = decimal.Parse(colDatas[columnPos["Senast"]].Text),
TimeOfDay = TimeSpan.Parse(colDatas[columnPos["Tid"]].Text)
});
rowIndex++;
//antal--;
shareSet.Remove(element.Text);
}
}
//if (antal < 1) break;
if (shareSet.Count < 1) break;
}
//GlobalStopwatch.PrintSecs("After scraplooping");
return shareCollection;
}
private static ColumnSpecialValue GetControl(IWebElement columnValue) private static ColumnSpecialValue GetControl(IWebElement columnValue)
{ {
ColumnSpecialValue? columnSpecialValue = null; ColumnSpecialValue? columnSpecialValue = null;

View File

@ -249,7 +249,7 @@ namespace StockDal
//GlobalStopwatch.PrintSecs("After dictionaries setup "); //GlobalStopwatch.PrintSecs("After dictionaries setup ");
var groupedStocks = _stockRepository.GetStocksGroupedPerPerson(persId); var groupedStocks = _stockRepository.GetStocksGroupedPerPerson(persId);
//GlobalStopwatch.PrintSecs("After groupedStocks fetched "); //GlobalStopwatch.PrintSecs("After groupedStocks fetched ");
var restStocks = new List<string>();
var lastGroup = string.Empty; var lastGroup = string.Empty;
var stockList = new List<string>(); var stockList = new List<string>();
foreach(var groupedStock in groupedStocks) foreach(var groupedStock in groupedStocks)
@ -261,8 +261,15 @@ namespace StockDal
_testSettings.StockWishes = stockList.ToArray(); _testSettings.StockWishes = stockList.ToArray();
stockList.Clear(); stockList.Clear();
//GlobalStopwatch.PrintSecs("Before GetStockStatus"); //GlobalStopwatch.PrintSecs("Before GetStockStatus");
saveStockData( _scrapePage.GetMyStockStatus(lastGroup)); if (lastGroup == "ZNotFound")
saveStockData(new List<DiTraderStockRow>( _scrapePage.SearchStockAndCollect("Pfizer")));
else
saveStockData( _scrapePage.GetMyStockStatus(lastGroup));
//GlobalStopwatch.PrintSecs("After GetStockStatus"); //GlobalStopwatch.PrintSecs("After GetStockStatus");
if (_testSettings.StockWishes.Length > 0)
{
restStocks.AddRange(_testSettings.StockWishes);
}
lastGroup = groupedStock.StockGroup; lastGroup = groupedStock.StockGroup;
} }
else else
@ -282,7 +289,14 @@ namespace StockDal
{ {
_testSettings.StockWishes = stockList.ToArray(); _testSettings.StockWishes = stockList.ToArray();
stockList.Clear(); stockList.Clear();
saveStockData(_scrapePage.GetMyStockStatus(lastGroup)); if (lastGroup == "ZNotFound")
saveStockData(new List<DiTraderStockRow>(_scrapePage.SearchStockAndCollect("Pfizer")));
else
saveStockData(_scrapePage.GetMyStockStatus(lastGroup));
if (_testSettings.StockWishes.Length > 0)
{
restStocks.AddRange(_testSettings.StockWishes);
}
} }
if (DumpObjects.Any()) if (DumpObjects.Any())

View File

@ -32,8 +32,46 @@ namespace StockDAL
Thread.Sleep(500); Thread.Sleep(500);
chooseList.SelectDropDownByText(listText); chooseList.SelectDropDownByText(listText);
Thread.Sleep(800); Thread.Sleep(800);
var stockList = tblList.SimpleReadTablePartly(_testSettings.StockWishes, _testSettings.StocWishCols); var stockListTuple = tblList.SimpleReadTablePartly(_testSettings.StockWishes, _testSettings.StocWishCols);
return stockList; return stockListTuple;
}
public List<DiTraderStockRow> SearchStockAndCollect(string stockName)
{
var returnValue = new List<DiTraderStockRow>();
IWebElement searchStock = _driver.FindElement(By.XPath("//*[@id='searchbox']/div/div[1]/input"));
searchStock.ClearAndEnterText(stockName);
//Console.WriteLine("SearchField filled out");
Thread.Sleep(1000);
var clicker = searchStock.FindElements(By.XPath("//*[@id='searchbox']/div/div[2]/table/tbody/tr/td/a"));
// Thread.Sleep(1000);
//Console.WriteLine("Click-field searched");
if (clicker.FirstOrDefault() != null)
{
if (clicker.FirstOrDefault().Displayed)
{
var output = new DiTraderStockRow();
output.StockName = clicker.FirstOrDefault().Text;
// Console.WriteLine("Click-field found");
//Thread.Sleep(1000);
clicker.FirstOrDefault().Click();
Thread.Sleep(800);
var valueField = _driver.FindElement(By.XPath("//*[@id='quote-details']/table/tbody/tr/td[5]"));
//Console.WriteLine("value-field searched");
if (valueField.Displayed)
{
//Console.WriteLine("value-field found");
output.LatestPrice = decimal.Parse( valueField.Text);
output.TimeOfDay = TimeSpan.Parse(DateTime.Now.ToString().Substring(11));
_driver.FindElement(By.XPath("//*[@id='equity-detail-page']/div[1]/div[1]/a")).Click();
returnValue.Add(output);
return returnValue;
}
}
}
//Console.WriteLine("Click-field not found");
return null;
} }
public void GetStocksPerList(string listText) public void GetStocksPerList(string listText)

View File

@ -5,6 +5,7 @@ namespace StockDAL.Interface
public interface IStockScrapePage public interface IStockScrapePage
{ {
List<DiTraderStockRow> GetMyStockStatus(string listText); List<DiTraderStockRow> GetMyStockStatus(string listText);
List<DiTraderStockRow> SearchStockAndCollect(string stockName);
void GetStocksPerList(string listText); void GetStocksPerList(string listText);
void PerformClickOnSpecialValue(string name, string operation); void PerformClickOnSpecialValue(string name, string operation);
} }