diff --git a/BrowserHelper/Extensions/HtmlTableExtension.cs b/BrowserHelper/Extensions/HtmlTableExtension.cs
index 8cad648..0f371c4 100644
--- a/BrowserHelper/Extensions/HtmlTableExtension.cs
+++ b/BrowserHelper/Extensions/HtmlTableExtension.cs
@@ -1,6 +1,8 @@
-using DataDomain;
+using BrowserHelper.Settings;
+using DataDomain;
using OpenQA.Selenium;
using System.Collections;
+using System.Collections.Generic;
namespace BrowserHelper.Extensions
{
@@ -73,7 +75,7 @@ namespace BrowserHelper.Extensions
return tableDataCollection;
}
- public static List SimpleReadTablePartly(this IWebElement table, string[] shares, string[] shareHeaders)
+ public static List SimpleReadTablePartlyOld(this IWebElement table, string[] shares, string[] shareHeaders)
{
var shareCollection = new List();
var columns = table.FindElements(By.TagName("th"));
@@ -114,6 +116,54 @@ namespace BrowserHelper.Extensions
return shareCollection;
}
+
+ public static List SimpleReadTablePartly(this IWebElement table, string[] shares, string[] shareHeaders)
+ {
+ var shareSet = new HashSet(shares);
+
+ var shareCollection = new List();
+ var columns = table.FindElements(By.TagName("th"));
+ IWebElement tblBody = table.FindElement(By.XPath(".//tbody"));
+ var rows = tblBody.FindElements(By.TagName("tr"));
+ Dictionary columnPos = new Dictionary();
+ //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)
{
ColumnSpecialValue? columnSpecialValue = null;
diff --git a/StockDAL/StockMarketRepository.cs b/StockDAL/StockMarketRepository.cs
index c5848e3..86cceea 100644
--- a/StockDAL/StockMarketRepository.cs
+++ b/StockDAL/StockMarketRepository.cs
@@ -249,7 +249,7 @@ namespace StockDal
//GlobalStopwatch.PrintSecs("After dictionaries setup ");
var groupedStocks = _stockRepository.GetStocksGroupedPerPerson(persId);
//GlobalStopwatch.PrintSecs("After groupedStocks fetched ");
-
+ var restStocks = new List();
var lastGroup = string.Empty;
var stockList = new List();
foreach(var groupedStock in groupedStocks)
@@ -261,8 +261,15 @@ namespace StockDal
_testSettings.StockWishes = stockList.ToArray();
stockList.Clear();
//GlobalStopwatch.PrintSecs("Before GetStockStatus");
- saveStockData( _scrapePage.GetMyStockStatus(lastGroup));
+ if (lastGroup == "ZNotFound")
+ saveStockData(new List( _scrapePage.SearchStockAndCollect("Pfizer")));
+ else
+ saveStockData( _scrapePage.GetMyStockStatus(lastGroup));
//GlobalStopwatch.PrintSecs("After GetStockStatus");
+ if (_testSettings.StockWishes.Length > 0)
+ {
+ restStocks.AddRange(_testSettings.StockWishes);
+ }
lastGroup = groupedStock.StockGroup;
}
else
@@ -282,7 +289,14 @@ namespace StockDal
{
_testSettings.StockWishes = stockList.ToArray();
stockList.Clear();
- saveStockData(_scrapePage.GetMyStockStatus(lastGroup));
+ if (lastGroup == "ZNotFound")
+ saveStockData(new List(_scrapePage.SearchStockAndCollect("Pfizer")));
+ else
+ saveStockData(_scrapePage.GetMyStockStatus(lastGroup));
+ if (_testSettings.StockWishes.Length > 0)
+ {
+ restStocks.AddRange(_testSettings.StockWishes);
+ }
}
if (DumpObjects.Any())
diff --git a/StockDAL/StockScrapePage.cs b/StockDAL/StockScrapePage.cs
index 1b18fb2..8e32ac7 100644
--- a/StockDAL/StockScrapePage.cs
+++ b/StockDAL/StockScrapePage.cs
@@ -32,8 +32,46 @@ namespace StockDAL
Thread.Sleep(500);
chooseList.SelectDropDownByText(listText);
Thread.Sleep(800);
- var stockList = tblList.SimpleReadTablePartly(_testSettings.StockWishes, _testSettings.StocWishCols);
- return stockList;
+ var stockListTuple = tblList.SimpleReadTablePartly(_testSettings.StockWishes, _testSettings.StocWishCols);
+ return stockListTuple;
+ }
+
+ public List SearchStockAndCollect(string stockName)
+ {
+ var returnValue = new List();
+ 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)
diff --git a/StockDal.Interface/IStockScrapePage.cs b/StockDal.Interface/IStockScrapePage.cs
index 2149b5a..4e3276f 100644
--- a/StockDal.Interface/IStockScrapePage.cs
+++ b/StockDal.Interface/IStockScrapePage.cs
@@ -5,6 +5,7 @@ namespace StockDAL.Interface
public interface IStockScrapePage
{
List GetMyStockStatus(string listText);
+ List SearchStockAndCollect(string stockName);
void GetStocksPerList(string listText);
void PerformClickOnSpecialValue(string name, string operation);
}