/// <summary> /// Loads all products on current catalogue page using row elements /// </summary> internal void LoadProductRows() { _logger.Trace(" > Attempting to load catalogue products..."); Thread.Sleep(2000); _productVariants = ProductsTable.FindElements(By.CssSelector(Constants.ProductPage.XP.ALL_PROD_VARIANTS)); _productQtyUp = ProductsTable.FindElements(By.XPath(Constants.ProductPage.XP.ROW_QTY_UP)); _productQtyDown = ProductsTable.FindElements(By.XPath(Constants.ProductPage.XP.ROW_QTY_DOWN)); try { // apply variant information _logger.Trace(" > Building catalogue: variant info..."); for (int i = 0; i < _productVariants.Count; ++i) { string prodInfo = "start" + _productVariants[i].GetAttribute("title") + "end"; string varInfo = _productVariants[i].Text + "end"; Product newProd = new Product(); newProd.ProductNumber = HelperMethods.GetBetween(prodInfo, "Product #: ", " | "); newProd.UPC = HelperMethods.GetBetween(prodInfo, "UPC: ", "end"); newProd.Colour = HelperMethods.GetBetween(varInfo, "Color: ", "\r\n"); newProd.Size = HelperMethods.GetBetween(varInfo, "Size: ", "\r\n"); newProd.Price = HelperMethods.GetBetween(varInfo, "$ ", "end"); newProd.QtyUp = _productQtyUp[i]; newProd.QtyDown = _productQtyDown[i]; newProd.Checked = false; _products.Add(newProd); } _logger.Info(" > Building catalogue: variant info - Complete!"); } catch (IndexOutOfRangeException) { _logger.Error("IndexOutOfRangeException encountered."); } _productQtyLocators = ProductsTable.FindElements(By.XPath(Constants.ProductPage.XP.PROD_VAR_QTYS)); try { // apply quantity box locators _logger.Trace(" > Building catalogue: quantity locators..."); for (int i = 0; i < _productQtyLocators.Count; ++i) { _products[i].QtyLocator = _productQtyLocators[i]; } _logger.Info(" > Building catalogue: quantity locators - Complete!"); } catch (IndexOutOfRangeException) { _logger.Error("IndexOutOfRangeException encountered."); } _productRows = ProductsTable.FindElements(By.XPath("//div[contains(@class,'product-row-wrapper')]")); _productUpdateBtns = ProductsTable.FindElements(By.XPath("//button[contains(@class, 'btn-update-order')]")); int startVal = 0; try { // apply update buttons _logger.Trace(" > Building catalogue: update buttons..."); for (int i = 0; i < _productRows.Count; ++i) { int btnCount = _productRows[i].Text.Count(f => f == '$'); for (int x = startVal; x < startVal + btnCount; ++x) { _products[x].UpdateButton = _productUpdateBtns[i]; } startVal += btnCount; } _logger.Info(" > Building catalogue: update buttons - Complete!"); } catch (IndexOutOfRangeException) { _logger.Error("IndexOutOfRangeException encountered."); } }
/// <summary> /// Find specific product in catalogue page to interat with /// </summary> /// <param name="prodNum">name of product to be searched for</param> /// <returns>Product object to interact with</returns> internal Product LoadProduct(string prodNum) { _logger.Trace(" > Searching for product: " + prodNum); Product currentProd = new Product(); try { foreach (Product prod in _products) { if (prod.ProductNumber.Equals(prodNum)) { currentProd.ProductNumber = prod.ProductNumber; currentProd.UPC = prod.UPC; currentProd.Colour = prod.Colour; currentProd.Size = prod.Size; currentProd.Price = prod.Price; currentProd.QtyUp = prod.QtyUp; currentProd.QtyDown = prod.QtyDown; currentProd.UpdateButton = prod.UpdateButton; currentProd.QtyLocator = prod.QtyLocator; _prodsInCart.Add(currentProd); } } _logger.Info(" > Product Found!"); } catch (Exception) { _logger.Fatal(" > Searching for product " +prodNum+ " [FAILED]"); _logger.Fatal("-- TEST FAILURE @ URL: '" + _driver.Url + "' --"); BaseDriverTest.TakeScreenshot("screenshot"); } return currentProd; }