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); }); }); }
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(); }
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); }
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()); }
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); }); }); }
private By GetRegistrationInputSelector() { return(BySizzle.CssSelector(".fbRegistrationTextField,.fbRegistrationPasswordField")); }
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 + "')")); }); }); }); }