Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SeleniumBrowser"/> class.
        /// </summary>
        /// <param name="driver">The browser driver as a lazy object.</param>
        public SeleniumBrowser(Lazy<IWebDriver> driver)
        {
            this.driver = driver;

            this.pageBuilder = new SeleniumPageBuilder();
            this.pageCache = new Dictionary<Type, Func<IWebDriver, IBrowser, Action<object>, object>>();
        }
        public void TestCreatePage()
        {
            var driver = new Mock<IWebDriver>(MockBehavior.Strict);
            var browser = new Mock<IBrowser>(MockBehavior.Strict);

            var listItem = new Mock<IWebElement>(MockBehavior.Loose);
            listItem.Setup(l => l.Displayed).Returns(true);

            var itemList = new ReadOnlyCollection<IWebElement>(new[] { listItem.Object });

            // Setup list mock
            var listElement = new Mock<IWebElement>(MockBehavior.Strict);
            listElement.Setup(l => l.FindElements(By.TagName("LI"))).Returns(itemList);

            // Setup mock for list
            driver.Setup(d => d.FindElement(By.Id("ListDiv"))).Returns(listElement.Object);


            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(BuildPage));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page = pageObject as BuildPage;

            Assert.IsNotNull(page);

            Assert.IsNotNull(page.TestButton);
            AssertLocatorValue(page.TestButton, By.Id("MyControl"));

            Assert.IsNotNull(page.CombinedControl);
            AssertLocatorValue(page.CombinedControl, new ByChained(By.Id("Field1"), By.LinkText("The Button")));

            Assert.IsNotNull(page.UserName);
            AssertLocatorValue(page.UserName, By.Name("UserName"));

            // Nesting Test
            Assert.IsNotNull(page.MyDiv);
            AssertLocatorValue(page.MyDiv, By.ClassName("btn"));

            Assert.IsNotNull(page.MyDiv.InternalButton);
            AssertLocatorValue(page.MyDiv.InternalButton, By.Id("InternalItem"));

            //List Test
            Assert.IsNotNull(page.MyCollection);
            Assert.IsInstanceOfType(page.MyCollection, typeof(SeleniumListElementWrapper<IWebElement, ListItem>));

            var propertyList = (SeleniumListElementWrapper<IWebElement, ListItem>)page.MyCollection;
            Assert.IsNotNull(propertyList.Parent);
            AssertLocatorValue(propertyList.Parent, By.Id("ListDiv"));

            // Test First Element
            var element = propertyList.FirstOrDefault();

            Assert.IsNotNull(element);
            Assert.IsNotNull(element.MyTitle);
            AssertLocatorValue(element.MyTitle, By.Id("itemTitle"));

            listElement.VerifyAll();
            listItem.VerifyAll();
            driver.VerifyAll();
        }
Пример #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SeleniumBrowser" /> class.
        /// </summary>
        /// <param name="driver">The browser driver as a lazy object.</param>
        /// <param name="logger">The logger.</param>
        public SeleniumBrowser(Lazy<IWebDriver> driver, ILogger logger) : base(logger)
        {
            // TODO: create timeouts structure, pass it through this constructor, so we know what the default timeouts are.
            this.driver = driver;

            this.pageBuilder = new SeleniumPageBuilder();
            this.pageCache = new Dictionary<Type, Func<IWebDriver, IBrowser, Action<object>, object>>();
        }
Пример #4
0
        public void TestCreatePageWithDuplicateNativeAndLocatorAttributes()
        {
            var driver  = new Mock <IWebDriver>();
            var browser = new Mock <IBrowser>(MockBehavior.Strict);

            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(NativeAttributePage));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page       = pageObject as NativeAttributePage;

            Assert.IsNotNull(page);
            Assert.IsNotNull(page.DuplicateElement);
            AssertLocatorValue(page.DuplicateElement, By.Id("1234"));
        }
Пример #5
0
        public void TestCreatePageWithCombinedNativeAndLocatorAttributes()
        {
            var driver  = new Mock <IWebDriver>();
            var browser = new Mock <IBrowser>(MockBehavior.Strict);

            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(NativeAttributePage));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page       = pageObject as NativeAttributePage;

            Assert.IsNotNull(page);
            Assert.IsNotNull(page.CombinedElement);
            AssertLocatorValue(page.CombinedElement, new ByChained(By.Id("combined"), By.TagName("DIV")));
        }
Пример #6
0
        public void TestCreatePageWithBrowserArgument()
        {
            var driver  = new Mock <IWebDriver>();
            var browser = new Mock <IBrowser>(MockBehavior.Strict);

            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(BrowserDocument));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page       = pageObject as BrowserDocument;

            Assert.IsNotNull(page);
            Assert.IsNotNull(page.Browser);

            driver.VerifyAll();
            browser.VerifyAll();
        }
Пример #7
0
        public void TestMissingArgumentConstructor()
        {
            var builder = new SeleniumPageBuilder();

            var pageFunc = builder.CreatePage(typeof(NoConstructorElement));

            Assert.IsNotNull(pageFunc);

            var driver  = new Mock <IWebDriver>();
            var browser = new Mock <IBrowser>(MockBehavior.Strict);

            var page = pageFunc(driver.Object, browser.Object, null);

            Assert.IsNotNull(page);
            Assert.IsInstanceOfType(page, typeof(NoConstructorElement));
        }
Пример #8
0
        public void TestMultipleConstructorArguments()
        {
            var driver  = new Mock <IWebDriver>(MockBehavior.Strict);
            var browser = new Mock <IBrowser>(MockBehavior.Strict);

            var listItem = new Mock <IWebElement>(MockBehavior.Loose);

            listItem.Setup(l => l.Displayed).Returns(true);

            var itemList = new ReadOnlyCollection <IWebElement>(new[] { listItem.Object });

            // Setup list mock
            var listElement = new Mock <IWebElement>(MockBehavior.Strict);

            listElement.Setup(l => l.FindElements(By.TagName("LI"))).Returns(itemList);

            // Setup mock for list
            driver.Setup(d => d.FindElement(By.Id("ListDiv"))).Returns(listElement.Object);


            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(NestedElementPage));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page       = pageObject as NestedElementPage;

            Assert.IsNotNull(page);

            Assert.IsNotNull(page.FirstChild);
            AssertLocatorValue(page.FirstChild, By.Id("Test1"));

            Assert.IsNotNull(page.FirstChild.SecondChild);
            AssertLocatorValue(page.FirstChild.SecondChild, By.Id("Test2"));

            var element = page.FirstChild.SecondChild;

            Assert.IsNotNull(element.SearchContext);
            Assert.IsNotNull(element.Driver);

            Assert.AreSame(driver.Object, element.Driver);
            Assert.AreSame(page.FirstChild, element.SearchContext);
        }
        public void TestMultipleConstructorArguments()
        {
            var driver = new Mock<IWebDriver>(MockBehavior.Strict);
            var browser = new Mock<IBrowser>(MockBehavior.Strict);

            var listItem = new Mock<IWebElement>(MockBehavior.Loose);
            listItem.Setup(l => l.Displayed).Returns(true);

            var itemList = new ReadOnlyCollection<IWebElement>(new[] { listItem.Object });

            // Setup list mock
            var listElement = new Mock<IWebElement>(MockBehavior.Strict);
            listElement.Setup(l => l.FindElements(By.TagName("LI"))).Returns(itemList);

            // Setup mock for list
            driver.Setup(d => d.FindElement(By.Id("ListDiv"))).Returns(listElement.Object);


            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(NestedElementPage));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page = pageObject as NestedElementPage;

            Assert.IsNotNull(page);

            Assert.IsNotNull(page.FirstChild);
            AssertLocatorValue(page.FirstChild, By.Id("Test1"));

            Assert.IsNotNull(page.FirstChild.SecondChild);
            AssertLocatorValue(page.FirstChild.SecondChild, By.Id("Test2"));

            var element = page.FirstChild.SecondChild;
            Assert.IsNotNull(element.SearchContext);
            Assert.IsNotNull(element.Driver);

            Assert.AreSame(driver.Object, element.Driver);
            Assert.AreSame(page.FirstChild, element.SearchContext);
        }
Пример #10
0
        public void TestCreatePageWithBrowserArgument()
        {
            var driver = new Mock<IWebDriver>();
            var browser = new Mock<IBrowser>(MockBehavior.Strict);

            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(BrowserDocument));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page = pageObject as BrowserDocument;

            Assert.IsNotNull(page);
            Assert.IsNotNull(page.Browser);

            driver.VerifyAll();
            browser.VerifyAll();
        }
Пример #11
0
        public void TestMissingArgumentConstructor()
        {
            var builder = new SeleniumPageBuilder();

            var pageFunc = builder.CreatePage(typeof(NoConstructorElement));

            Assert.IsNotNull(pageFunc);

            var driver = new Mock<IWebDriver>();
            var browser = new Mock<IBrowser>(MockBehavior.Strict);

            var page = pageFunc(driver.Object, browser.Object, null);

            Assert.IsNotNull(page);
            Assert.IsInstanceOfType(page, typeof(NoConstructorElement));
        }
Пример #12
0
        public void TestCreatePageWithNativeProperties()
        {
            var driver = new Mock<IWebDriver>(MockBehavior.Strict);
            var browser = new Mock<IBrowser>(MockBehavior.Strict);

            var listItem = new Mock<IWebElement>(MockBehavior.Loose);
            listItem.Setup(l => l.Displayed).Returns(true);

            var itemList = new ReadOnlyCollection<IWebElement>(new[] { listItem.Object });

            // Setup list mock
            var listElement = new Mock<IWebElement>(MockBehavior.Strict);
            listElement.Setup(l => l.FindElements(By.TagName("LI"))).Returns(itemList);

            // Setup mock for list
            driver.Setup(d => d.FindElement(By.Id("ListDiv"))).Returns(listElement.Object);


            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(BuildPage));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page = pageObject as BuildPage;

            Assert.IsNotNull(page);

            Assert.IsNotNull(page.TestButton);
            AssertLocatorValue(page.TestButton, By.Id("MyControl"));

            Assert.IsNotNull(page.CombinedControl);
            AssertLocatorValue(page.CombinedControl, new ByChained(By.Id("Field1"), By.LinkText("The Button")));

            Assert.IsNotNull(page.UserName);
            AssertLocatorValue(page.UserName, By.Name("UserName"));

            // Image Url Testing
            Assert.IsNotNull(page.ImageElement);
            AssertLocatorValue(page.ImageElement, By.XPath("//img[@src='/myapp']"));

            // Link Url Testing
            Assert.IsNotNull(page.LinkElement);
            AssertLocatorValue(page.LinkElement, By.XPath("//a[@href='/myapp']"));

            // Link Area Url Testing
            Assert.IsNotNull(page.LinkAreaElement);
            AssertLocatorValue(page.LinkAreaElement, By.XPath("//area[@href='/myapp']"));

            // Image Alt Testing
            Assert.IsNotNull(page.AltImageElement);
            AssertLocatorValue(page.AltImageElement, By.XPath("//img[@alt='Alt Text']"));

            // Value Attribute Testing
            Assert.IsNotNull(page.ValueElement);
            AssertLocatorValue(page.ValueElement, By.XPath("//input[@value='something']"));

            // Title Attribute Testing
            Assert.IsNotNull(page.TitleElement);
            AssertLocatorValue(page.TitleElement, By.XPath("//p[@title='royal']"));

            // Type Attribute Testing
            Assert.IsNotNull(page.InputTypeElement);
            AssertLocatorValue(page.InputTypeElement, By.XPath("//input[@type='password']"));

            // Index Attribute Testing
            Assert.IsNotNull(page.IndexElement);
            AssertLocatorValue(page.IndexElement, By.XPath("//button[1]"));

            // Nesting Test
            Assert.IsNotNull(page.MyDiv);
            AssertLocatorValue(page.MyDiv, By.ClassName("btn"));

            Assert.IsNotNull(page.MyDiv.InternalButton);
            AssertLocatorValue(page.MyDiv.InternalButton, By.Id("InternalItem"));

            //List Test
            Assert.IsNotNull(page.MyCollection);
            Assert.IsInstanceOfType(page.MyCollection, typeof(SeleniumListElementWrapper<IWebElement, ListItem>));

            var propertyList = (SeleniumListElementWrapper<IWebElement, ListItem>)page.MyCollection;
            Assert.IsNotNull(propertyList.Parent);
            AssertLocatorValue(propertyList.Parent, By.Id("ListDiv"));

            // Test First Element
            var element = propertyList.FirstOrDefault();

            Assert.IsNotNull(element);
            Assert.IsNotNull(element.MyTitle);
            AssertLocatorValue(element.MyTitle, By.Id("itemTitle"));

            listElement.VerifyAll();
            listItem.VerifyAll();
            driver.VerifyAll();
        }
Пример #13
0
        public void TestCreatePageWithDuplicateNativeAndLocatorAttributes()
        {
            var driver = new Mock<IWebDriver>();
            var browser = new Mock<IBrowser>(MockBehavior.Strict);

            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(NativeAttributePage));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page = pageObject as NativeAttributePage;

            Assert.IsNotNull(page);
            Assert.IsNotNull(page.DuplicateElement);
            AssertLocatorValue(page.DuplicateElement, By.Id("1234"));
        }
Пример #14
0
        public void TestCreatePageWithCombinedNativeAndLocatorAttributes()
        {
            var driver = new Mock<IWebDriver>();
            var browser = new Mock<IBrowser>(MockBehavior.Strict);

            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(NativeAttributePage));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page = pageObject as NativeAttributePage;

            Assert.IsNotNull(page);
            Assert.IsNotNull(page.CombinedElement);
            AssertLocatorValue(page.CombinedElement, new ByChained(By.Id("combined"), By.TagName("DIV")));
        }
Пример #15
0
        public void TestCreatePage()
        {
            var driver  = new Mock <IWebDriver>(MockBehavior.Strict);
            var browser = new Mock <IBrowser>(MockBehavior.Strict);

            var listItem = new Mock <IWebElement>(MockBehavior.Loose);

            listItem.Setup(l => l.Displayed).Returns(true);

            var itemList = new ReadOnlyCollection <IWebElement>(new[] { listItem.Object });

            // Setup list mock
            var listElement = new Mock <IWebElement>(MockBehavior.Strict);

            listElement.Setup(l => l.FindElements(By.TagName("LI"))).Returns(itemList);

            // Setup mock for list
            driver.Setup(d => d.FindElement(By.Id("ListDiv"))).Returns(listElement.Object);


            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(BuildPage));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page       = pageObject as BuildPage;

            Assert.IsNotNull(page);

            Assert.IsNotNull(page.TestButton);
            AssertLocatorValue(page.TestButton, By.Id("MyControl"));

            Assert.IsNotNull(page.CombinedControl);
            AssertLocatorValue(page.CombinedControl, new ByChained(By.Id("Field1"), By.LinkText("The Button")));

            Assert.IsNotNull(page.UserName);
            AssertLocatorValue(page.UserName, By.Name("UserName"));

            // Nesting Test
            Assert.IsNotNull(page.MyDiv);
            AssertLocatorValue(page.MyDiv, By.ClassName("btn"));

            Assert.IsNotNull(page.MyDiv.InternalButton);
            AssertLocatorValue(page.MyDiv.InternalButton, By.Id("InternalItem"));

            //List Test
            Assert.IsNotNull(page.MyCollection);
            Assert.IsInstanceOfType(page.MyCollection, typeof(SeleniumListElementWrapper <IWebElement, ListItem>));

            var propertyList = (SeleniumListElementWrapper <IWebElement, ListItem>)page.MyCollection;

            Assert.IsNotNull(propertyList.Parent);
            AssertLocatorValue(propertyList.Parent, By.Id("ListDiv"));

            // Test First Element
            var element = propertyList.FirstOrDefault();

            Assert.IsNotNull(element);
            Assert.IsNotNull(element.MyTitle);
            AssertLocatorValue(element.MyTitle, By.Id("itemTitle"));

            listElement.VerifyAll();
            listItem.VerifyAll();
            driver.VerifyAll();
        }
Пример #16
0
        public void TestCreatePageWithNativeProperties()
        {
            var driver  = new Mock <IWebDriver>(MockBehavior.Strict);
            var browser = new Mock <IBrowser>(MockBehavior.Strict);

            var listItem = new Mock <IWebElement>(MockBehavior.Loose);

            listItem.Setup(l => l.Displayed).Returns(true);

            var itemList = new ReadOnlyCollection <IWebElement>(new[] { listItem.Object });

            // Setup list mock
            var listElement = new Mock <IWebElement>(MockBehavior.Strict);

            listElement.Setup(l => l.FindElements(By.TagName("LI"))).Returns(itemList);

            // Setup mock for list
            driver.Setup(d => d.FindElement(By.Id("ListDiv"))).Returns(listElement.Object);


            var pageFunc = new SeleniumPageBuilder().CreatePage(typeof(BuildPage));

            var pageObject = pageFunc(driver.Object, browser.Object, null);
            var page       = pageObject as BuildPage;

            Assert.IsNotNull(page);

            Assert.IsNotNull(page.TestButton);
            AssertLocatorValue(page.TestButton, By.Id("MyControl"));

            Assert.IsNotNull(page.CombinedControl);
            AssertLocatorValue(page.CombinedControl, new ByChained(By.Id("Field1"), By.LinkText("The Button")));

            Assert.IsNotNull(page.UserName);
            AssertLocatorValue(page.UserName, By.Name("UserName"));

            // Image Url Testing
            Assert.IsNotNull(page.ImageElement);
            AssertLocatorValue(page.ImageElement, By.XPath("//img[@src='/myapp']"));

            // Link Url Testing
            Assert.IsNotNull(page.LinkElement);
            AssertLocatorValue(page.LinkElement, By.XPath("//a[@href='/myapp']"));

            // Link Area Url Testing
            Assert.IsNotNull(page.LinkAreaElement);
            AssertLocatorValue(page.LinkAreaElement, By.XPath("//area[@href='/myapp']"));

            // Image Alt Testing
            Assert.IsNotNull(page.AltImageElement);
            AssertLocatorValue(page.AltImageElement, By.XPath("//img[@alt='Alt Text']"));

            // Value Attribute Testing
            Assert.IsNotNull(page.ValueElement);
            AssertLocatorValue(page.ValueElement, By.XPath("//input[@value='something']"));

            // Title Attribute Testing
            Assert.IsNotNull(page.TitleElement);
            AssertLocatorValue(page.TitleElement, By.XPath("//p[@title='royal']"));

            // Type Attribute Testing
            Assert.IsNotNull(page.InputTypeElement);
            AssertLocatorValue(page.InputTypeElement, By.XPath("//input[@type='password']"));

            // Index Attribute Testing
            Assert.IsNotNull(page.IndexElement);
            AssertLocatorValue(page.IndexElement, By.XPath("//button[1]"));

            // Nesting Test
            Assert.IsNotNull(page.MyDiv);
            AssertLocatorValue(page.MyDiv, By.ClassName("btn"));

            Assert.IsNotNull(page.MyDiv.InternalButton);
            AssertLocatorValue(page.MyDiv.InternalButton, By.Id("InternalItem"));

            //List Test
            Assert.IsNotNull(page.MyCollection);
            Assert.IsInstanceOfType(page.MyCollection, typeof(SeleniumListElementWrapper <IWebElement, ListItem>));

            var propertyList = (SeleniumListElementWrapper <IWebElement, ListItem>)page.MyCollection;

            Assert.IsNotNull(propertyList.Parent);
            AssertLocatorValue(propertyList.Parent, By.Id("ListDiv"));

            // Test First Element
            var element = propertyList.FirstOrDefault();

            Assert.IsNotNull(element);
            Assert.IsNotNull(element.MyTitle);
            AssertLocatorValue(element.MyTitle, By.Id("itemTitle"));

            listElement.VerifyAll();
            listItem.VerifyAll();
            driver.VerifyAll();
        }