Exemple #1
0
        public override void Specify()
        {
            var site = beforeAll(() => IISExpressDriver.StartServer());

            beforeAll(delegate() {
                var hostName = new Uri(site.UrlFor("")).Host;

                expect(() => hostName.Contains("localhost"));

                PSHostsFile.HostsFile.Set(hostName, "127.0.0.1");
            });

            describe("the web application's configuration", delegate()
            {
                var browser = beforeAll(() => new FirefoxDriver());

                it("should have a functioning database connection string", delegate() {
                    browser.Navigate().GoToUrl(site.UrlFor("/Check"));

                    var errorElement = browser.FindElement(BySizzle.CssSelector("#error"));

                    string actual = errorElement.Text.Trim();

                    Assert.That(string.IsNullOrEmpty(actual), "SQL configuration error detected.  Do you have SQL express installed and setup?  If not, you can get it here: http://www.microsoft.com/download/en/details.aspx?id=26729 \nServer reported error:\n\n" + actual);
                });
            });
        }
Exemple #2
0
        private void click_registration_button(ChromeDriver browser)
        {
            //  multiple submit buttons existed, we click the one that is visible
            var findElement =
                browser.FindElements(BySizzle.CssSelector("input[value=Register]")).First(e => e.Displayed);

            findElement.Click();
        }
Exemple #3
0
        private void go_to_registration_form(ChromeDriver browser, IISExpressDriver site)
        {
            browser.Navigate().GoToUrl(site.UrlFor("/Account/Register"));

            var iframe =
                browser.WaitForElementEx(
                    BySizzle.CssSelector("iframe[src^=\"https://www.facebook.com/plugins/registration.php\"]"),
                    Constants.MSLongWait);

            browser.SwitchTo().Frame(iframe);
        }
Exemple #4
0
        private void submit_registration_dialog_as_facebook_user(ChromeDriver browser)
        {
            var windowContext = new WhichWindowContext(browser);

            click_registration_button(browser);

            browser.SwitchTo().Window(windowContext.GetNewWindowName());
            browser.FindElement(BySizzle.CssSelector("input[value=Continue]")).Click();

            browser.SwitchTo().Window(windowContext.GetOriginalWindowName());
        }
Exemple #5
0
        public override void SpecifyForBrowser(IWebDriver browser)
        {
            var server = beforeAll(() => new StaticServer()
            {
                { "jquery.js", JQuerySource.GetJQuerySource() }
            }.Start());

            beforeAll(() => server.Add("delay.html",
                                       JQueryUtil.HtmlLoadingJQuery(server.UrlFor("jquery.js"), "<div> Hello, world. </div>")));

            describe("WaitForElement", delegate
            {
                arrange(() => browser.Navigate().GoToUrl(server.UrlFor("delay.html")));

                it("can find an element on the page", delegate
                {
                    expect(() => browser.WaitForElement(BySizzle.CssSelector("div:contains('Hello, world')")) != null);
                });

                it("reports a useful error if the element is not eventually found", delegate
                {
                    var expectedMessage = Assert.Throws <NoSuchElementException>(delegate
                    {
                        browser.FindElement(By.CssSelector("div div li ul ol lol.so img.nothappening"));
                    }).Message;

                    var actualException = Assert.Throws <NoSuchElementException>(delegate
                    {
                        browser.WaitForElement(By.CssSelector("div div li ul ol lol.so img.nothappening"));
                    });

                    expect(() => actualException.Message.Contains(expectedMessage));
                });

                it("will wait for elements", delegate
                {
                    (browser as IJavaScriptExecutor).ExecuteScript(@"
setTimeout(function() { $('body').append('<div>Better late than never.</div>'); }, 2000);
");

                    expect(() => browser.WaitForElement(BySizzle.CssSelector("div:contains('Better late than never.')")) != null);
                });
            });
        }
Exemple #6
0
 private By GetRegistrationInputSelector()
 {
     return(BySizzle.CssSelector(".fbRegistrationTextField,.fbRegistrationPasswordField"));
 }
Exemple #7
0
        public override void Specify()
        {
            var site = beforeAll(() => IISExpressDriver.StartServer());

            var siteUsername = Guid.NewGuid().ToString();

            var facebook = arrange(() => new FacebookClient());

            var browser = arrange(() =>
            {
                //  Firefox fails as it puts up a warning dialog
                //  when posting to non-HTTPS from the HTTPS iframe
                //var profile = new FirefoxProfile();
                //profile.SetPreference("security.warn_entering_weak", false);
                //profile.SetPreference("security.warn_entering_weak.show_once", false);
                //profile.SetPreference("security.warn_submit_insecure", false);

                //return new FirefoxDriver(profile);

                return(new ChromeDriver());
            });

            given("a logged in facebook user", delegate()
            {
                var userFullname = "Some Fbuser";
                var user         = arrange(() => facebook.CreateTestUser(userFullname));

                arrange(delegate()
                {
                    browser.Navigate().GoToUrl("http://www.facebook.com/");
                    browser.FindElement(BySizzle.CssSelector("input[name=email]")).SendKeys(user.email);
                    browser.FindElement(BySizzle.CssSelector("input[name=pass]")).SendKeys(user.password);
                    browser.FindElement(BySizzle.CssSelector(".menu_login_container input[type=Submit]")).Click();
                    browser.WaitForElement(BySizzle.CssSelector("input[value='Log Out']"));
                });

                given("the user registers on the site", delegate()
                {
                    arrange(delegate()
                    {
                        go_to_registration_form(browser, site);

                        type_registration_fields(browser, new
                        {
                            nickname = siteUsername
                        });

                        submit_registration_dialog_as_facebook_user(browser);
                    });

                    then_it_shows_the_user_has_logged_in(browser, siteUsername);
                });

                given("the user tries registering with a short nickname (which fails model violation)", delegate()
                {
                    arrange(delegate()
                    {
                        go_to_registration_form(browser, site);

                        type_registration_fields(browser, new
                        {
                            nickname = "la"
                        });

                        submit_registration_dialog_as_facebook_user(browser);
                    });

                    it("should say registration failed", delegate()
                    {
                        expectEventually(() => browser.ContainsText("Account creation was unsuccessful."));
                        expect(() => browser.ContainsText("Username must be at least 6 characters long"));
                    });
                });
            });

            given("a non-facebook user registers on the site", delegate()
            {
                var email    = siteUsername + "@somesite.com";
                var password = siteUsername.Substring(0, 10);

                arrange(delegate()
                {
                    go_to_registration_form(browser, site);

                    should_have_registration_fields(browser, "nickname", "email", "password", "password_confirmation");

                    type_registration_fields(browser, new
                    {
                        nickname = siteUsername,
                        email    = email,
                        password = password,
                        password_confirmation = password
                    });

                    click_registration_button(browser);
                });

                then_it_shows_the_user_has_logged_in(browser, siteUsername);

                when("the user tries to log in later", delegate()
                {
                    var secondBrowser = arrange(() => new ChromeDriver());

                    arrange(delegate()
                    {
                        secondBrowser.Navigate().GoToUrl(site.UrlFor("/Account/LogOn"));
                        secondBrowser.FindElement(BySizzle.CssSelector("input[name=UserName]")).SendKeys(siteUsername);
                        secondBrowser.FindElement(BySizzle.CssSelector("input[name=Password]")).SendKeys(password);
                        secondBrowser.FindElement(BySizzle.CssSelector("input[value='Log On']")).Click();
                    });

                    then_it_shows_the_user_has_logged_in(browser, siteUsername);
                });
            });
        }
        public override void Specify()
        {
            var    facebookClient = arrange(() => new FacebookClient());
            string userFullname   = "User Name";

            given("a facebook user", delegate()
            {
                var user = arrange(() => facebookClient.CreateTestUser(userFullname));

                given("the user visits a content page", delegate()
                {
                    var server = beforeAll(() => IISExpressDriver.StartServer());

                    var browser = arrange(() => new FirefoxDriver());

                    arrange(() => browser.Navigate().GoToUrl(server.UrlFor("/View/123")));

                    expect(() => browser.ContainsText("Welcome to 123"));

                    then("the user can post a comment", delegate()
                    {
                        var comment = Guid.NewGuid().ToString();

                        var iframe =
                            browser.WaitForElementEx(
                                BySizzle.CssSelector("iframe[src^=\"https://www.facebook.com/plugins/comments.php\"]"),
                                Constants.MSLongWait);

                        browser.SwitchTo().Frame(iframe);

                        var buttonIndicatingCommentFormIsHidden =
                            browser.FindElements(BySizzle.CssSelector("a:contains('Add a comment')"));

                        if (buttonIndicatingCommentFormIsHidden.Count() > 0)
                        {
                            buttonIndicatingCommentFormIsHidden.Single().Click();
                        }

                        browser.FindElement(BySizzle.CssSelector("textarea")).SendKeys(comment);
                        browser.FindElement(BySizzle.CssSelector("a[data-label^='Comment using']")).Click();

                        var windowContext = new WhichWindowContext(browser);

                        browser.FindElement(BySizzle.CssSelector("a[onclick*=setProvider]:contains('Facebook')")).Click();

                        browser.SwitchTo().Window(windowContext.GetNewWindowName());

                        browser.FindElement(BySizzle.CssSelector("input[id=email]")).SendKeys(user.email);
                        browser.FindElement(BySizzle.CssSelector("input[id=pass]")).SendKeys(user.password);
                        browser.FindElement(BySizzle.CssSelector("input[name=login]")).Click();

                        browser.SwitchTo().Window(windowContext.GetOriginalWindowName());
                        browser.SwitchTo().Frame(iframe);

                        var waitForElement = browser.WaitForElement(BySizzle.CssSelector("input[value=Comment]"));
                        expectEventually(() => waitForElement.Displayed, Constants.MSLongWait);
                        waitForElement.Click();

                        browser.FindElements(BySizzle.CssSelector("div.postText:contains('" + comment + "')"));
                    });
                });
            });
        }