Pages

Tuesday, March 16, 2021

Steps C# Edge driver and Selenium Test Project

Create NUnit or MSTest project

In project manager, install pacakge: Microsoft.Edge.SeleniumTools

Package will install:

  • Microsoft.Edge.SeleniumTools
  • Selenium.WebDriver
  • Selenium.Support
  • DotNetSeleniumExtras.PageObjects.Core 
**PageObjects were marked obsolete - instead of  OpenQA.Selenium.Support.PageObjects use SeleniumExtras.PageObjects namespace. 

Navigate to: WebDriver - Microsoft Edge Developer

Download latest Microsoft Edge Driver.


Open downloaded Microsoft Edge Driver zip file and save msedgedriver.exe to a local drive.

Must change driver's name from msedgedriver.exe to MicrosoftWebDriver.exe. 

**Changing name is a must or an error message:
 OpenQA.Selenium.DriverServiceNotFoundException : The file C:\Selenium\EdgeDriver\msedgedriver.exe does not exist. The driver can be downloaded at https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

Reference EdgeDriver within Test fixture.


[Test] public void Test1() { //Open Browser IWebDriver webDriver = new EdgeDriver(@"C:\Selenium\EdgeDriver"); //Navigate to site webDriver.Navigate().GoToUrl("http://yoopergreens.com"); //Assert.Pass(); }
This post is for the purpose of my notes only and sometimes a rant.
“I invented nothing new. I simply assembled the discoveries of other men behind whom were centuries of work. Had I worked fifty or ten or even five years before, I would have failed. So it is with every new thing. Progress happens when all the factors that make for it are ready and then it is inevitable. To teach that a comparatively few men are responsible for the greatest forward steps of mankind is the worst sort of nonsense.”
Henry Ford

Tuesday, March 9, 2021

TypeScript Recursion Code Snippet

Reusable TypeScript / JavaScript Recursion Method

Toggling opening and closing UI block level elements. Handles n - level.


Targeting a button, toggles open showing its children elements.




Targeting another button, will hide all shown children elements.



















Hooking up UI


$(".toggleSeeds").click((function () {
    var state = {},
        currentId = null;

    return function () {
        var id: number = GetId(this.id);

        ResetStates(this);

        state[id] = typeof state[id] != "undefined" ? state[id] : {
            collapsed: true,
            toggleSeeds: $("#toggleSeeds_" + id + "> img")[0],
            supplierSeeds: $("#supplierSeeds_" + id)
        };

        if (state[id].collapsed) {

            state[id].supplierSeeds.show();
            state[id].toggleSeeds.src = "/images/SVG/arrowhead-Down.svg";

            if (currentId && currentId != id) {
                state[currentId].supplierSeeds.hide();
                state[currentId].collapsed = true;
                state[currentId].toggleSeeds.src = "/images/SVG/arrowhead-Right.svg";
            }
            currentId = id;
        } else {
            state[id].supplierSeeds.hide();
            state[id].toggleSeeds.src = "/images/SVG/arrowhead-Right.svg";
            currentId = null;
        }

        state[id].collapsed = !state[id].collapsed;
    }
}()));
  
Tracking states
var ResetStates: (element: HTMLElement) => void = (function () {  
  var buttonState: HTMLElement[] = [];  
  return (element: HTMLElement) => {  
   var state: HTMLElement,  
    parent: HTMLElement,  
    stateLevels: RegExpMatchArray,  
    targetLevels: RegExpMatchArray,  
    sameLevel: boolean,  
    sameParent: boolean,  
    isChild: boolean,  
    switchedLevels: boolean;  
   if (buttonState.length == 0) {  
    buttonState.push(element);  
    return;  
   }  
   state = buttonState[buttonState.length - 1] ?? element;  
   parent = buttonState[0] ?? element;  
   stateLevels = state.id.match(/[0-9]+/g);  
   targetLevels = element.id.match(/[0-9]+/g);  
   sameParent = stateLevels[0] == targetLevels[0];  
   sameLevel = stateLevels.length == targetLevels.length;  
   isChild = (targetLevels.length > stateLevels.length) && sameParent;  
   switchedLevels = (parent.id != element.id) && !sameParent;  
   if (state.id != element.id) {  
    if (sameLevel) {  
     buttonState[buttonState.length - 1] = null;  
     state.click();  
     buttonState.push(element);  
    } else if (isChild) {  
     buttonState.push(element);  
    } else if (switchedLevels || sameParent) {  
     while (buttonState.length > 0) {  
      state = buttonState[buttonState.length - 1];  
      if (state != null) {  
       buttonState[buttonState.length - 1] = null;  
       state.click();  
      }  
     }  
     buttonState.push(element);  
    }  
   } else {  
    buttonState.pop();  
   }  
  }  
 }()); 
This post is for the purpose of my notes only and sometimes a rant.
“I invented nothing new. I simply assembled the discoveries of other men behind whom were centuries of work. Had I worked fifty or ten or even five years before, I would have failed. So it is with every new thing. Progress happens when all the factors that make for it are ready and then it is inevitable. To teach that a comparatively few men are responsible for the greatest forward steps of mankind is the worst sort of nonsense.”
Henry Ford