/****************************************************************************** * * net.nodomain.www.tests.cs - www.nodomain.net test cases * © 2017 by Josh Moyer , all rights reserved * * Release Notes: * - Some tests NYI * - Some implemented tests not passing in all browsers * * *****************************************************************************/ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Edge; using OpenQA.Selenium.Firefox; using OpenQA.Selenium.IE; using OpenQA.Selenium.Support.UI; namespace net.nodomain.www { [TestClass()] public class tests { string SiteAddress = "http://www.nodomain.net/"; IWebDriver Driver; public void ChangeColors() { // NYI } public void PlaySanctuary() { // NYI } [TestMethod()] public void SettingsPaneToggleChrome() { this.Driver = new ChromeDriver(); try { SettingsPaneToggle(); } finally { this.Driver.Dispose(); } } [TestMethod()] public void SettingsPaneToggleEdge() { this.Driver = new EdgeDriver(); try { SettingsPaneToggle(); } finally { this.Driver.Dispose(); } } [TestMethod()] public void SettingsPaneToggleFirefox() { this.Driver = new FirefoxDriver(); try { SettingsPaneToggle(); } finally { this.Driver.Dispose(); } } [TestMethod()] public void SettingsPaneToggleIE() { this.Driver = new InternetExplorerDriver(); try { SettingsPaneToggle(); } finally { this.Driver.Dispose(); } } public void SettingsPaneToggle() { IWebElement gears; IWebElement settingsPane; string settingsId = "content-settings"; WebDriverWait wait; this.Driver.Navigate().GoToUrl(this.SiteAddress); wait = new WebDriverWait(this.Driver, TimeSpan.FromSeconds(15)); wait.Until((d => d.FindElement(By.Id("gears")).Displayed)); gears = this.Driver.FindElement(By.Id("gears")); gears.Click(); wait = new WebDriverWait(this.Driver, TimeSpan.FromSeconds(1)); wait.Until((d => d.FindElement(By.Id(settingsId)).Displayed)); settingsPane = this.Driver.FindElement(By.Id(settingsId)); Assert.IsTrue(settingsPane.Displayed); gears.Click(); settingsPane = null; try { settingsPane = this.Driver.FindElement(By.Id(settingsId)); } catch (NoSuchElementException) { } Assert.IsNull(settingsPane); } [TestMethod()] public void VisitLinksChrome() { this.Driver = new ChromeDriver(); try { VisitLinks(); } finally { this.Driver.Dispose(); } } [TestMethod()] public void VisitLinksEdge() { this.Driver = new EdgeDriver(); try { VisitLinks(); } finally { this.Driver.Dispose(); } } [TestMethod()] public void VisitLinksFirefox() { this.Driver = new FirefoxDriver(); try { VisitLinks(); } finally { this.Driver.Dispose(); } } [TestMethod()] public void VisitLinksIE() { this.Driver = new InternetExplorerDriver(); try { VisitLinks(); } finally { this.Driver.Dispose(); } } public void VisitLinks() { Collection Links = new Collection(); Dictionary LinkAndTitlePairs = new Dictionary(); ReadOnlyCollection anchors; string Title; WebDriverWait wait; LinkAndTitlePairs.Add("http://nodomain.net/", "nodomain.net home"); LinkAndTitlePairs.Add( this.SiteAddress, "nodomain.net home"); LinkAndTitlePairs.Add("https://cloud.google.com/compute/", "Compute Engine - IaaS  |  Google Cloud Platform"); LinkAndTitlePairs.Add("https://azure.microsoft.com/en-us/services/virtual-machines/", "Virtual Machines—Linux and Azure virtual machines | Microsoft Azure"); LinkAndTitlePairs.Add("https://www.vmware.com/workstation", "Windows VM | VMware Workstation Pro"); LinkAndTitlePairs.Add("https://www.bragi.com/bragi-os/", "Bragi OS - Bragi"); LinkAndTitlePairs.Add("https://www.kernel.org/", "The Linux Kernel Archives"); LinkAndTitlePairs.Add("https://developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/Mach/Mach.html", "Mach Overview"); LinkAndTitlePairs.Add("https://www.openbsd.org/", "OpenBSD"); LinkAndTitlePairs.Add("https://www.microsoft.com/en-us/windows", "Windows | Official Site for Microsoft Windows 10 Home, S & Pro OS, laptops, PCs, tablets & more"); LinkAndTitlePairs.Add("https://en.wikipedia.org/wiki/Serial_Bus_Protocol_2", "Serial Bus Protocol 2 - Wikipedia"); LinkAndTitlePairs.Add("http://jmoyer.nodomain.net/", "Josh Moyer"); LinkAndTitlePairs.Add("http://bureau.jmoyer.nodomain.net/", "Josh Moyer: Bureau"); LinkAndTitlePairs.Add("http://factory.jmoyer.nodomain.net/", "Josh Moyer: Factory"); LinkAndTitlePairs.Add("http://studio.jmoyer.nodomain.net/", "Josh Moyer: Studio"); LinkAndTitlePairs.Add("http://jmoyer.nodomain.net/NeXT/", ""); LinkAndTitlePairs.Add("http://www.nodomain.net/toasters.aspx", "nodomain.net flying toaster sanctuary"); LinkAndTitlePairs.Add("https://www.isc.org/downloads/bind/", "BIND Open Source DNS Server | Internet Systems Consortium"); LinkAndTitlePairs.Add("http://www.dell.com/", "Dell United States Official Site | Dell United States"); LinkAndTitlePairs.Add("http://www.microsoft.com/exchange/", "Microsoft Exchange, Secure Enterprise Email Solutions for Business"); LinkAndTitlePairs.Add("https://cloud.google.com/monitoring/", "Stackdriver Monitoring - Hybrid Cloud Monitoring  |  Google Cloud Platform"); LinkAndTitlePairs.Add("http://cloud.google.com/", "Google Cloud Computing, Hosting Services & APIs  |  Google Cloud Platform"); LinkAndTitlePairs.Add("http://www.nodomain.net/map.aspx", "nodomain.net network infrastructure map"); LinkAndTitlePairs.Add("http://www.openbsd.org/", "OpenBSD"); LinkAndTitlePairs.Add("http://www.apple.com/", "Apple"); LinkAndTitlePairs.Add("http://www.nodomain.net/policies.aspx", "nodomain.net usage agreement"); //LinkAndTitlePairs.Add("", ""); this.Driver.Navigate().GoToUrl(this.SiteAddress); wait = new WebDriverWait(this.Driver, TimeSpan.FromSeconds(10)); wait.Until(d => d.FindElement(By.Id("partnerlogoimage"))); anchors = this.Driver.FindElements(By.TagName("a")); //if (anchors.Count == 0) throw new Exception(); Assert.AreNotEqual(anchors.Count, 0); // copy Links here to avoid having references go stale // after the coming calls to Navigate() foreach (IWebElement anchor in anchors) { Links.Add(anchor.GetAttribute("href")); } foreach (string Link in Links) { if (Link.StartsWith("http")) Title = LinkAndTitlePairs[Link]; else continue; this.Driver.Navigate().GoToUrl(Link); wait = new WebDriverWait(this.Driver, TimeSpan.FromSeconds(10)); wait.Until(d => d.Title.StartsWith(Title, StringComparison.Ordinal)); } } private struct LinkAndTitlePair { public readonly string Link; public readonly string Title; public LinkAndTitlePair(string link, string title) { Link = link; Title = title; } } } }