示例#1
0
文件: user.go 项目: 18F/cg-dashboard
func (u User) LogoutOf(page *agouti.Page) {
	Expect(page.Navigate(u.testEnvVars.Hostname + "/v2/logout")).To(Succeed())
	/*
		Expect(page.Find("#logout-btn").Click()).To(Succeed())
		Eventually(Expect(page).To(HaveURL(u.testEnvVars.LoginURL + "login")))
	*/
}
func getLastPost(page *agouti.Page) *agouti.Selection {
	posts := page.All("#chat .message")
	postsCount, err := posts.Count()
	if err != nil {
		panic(err)
	}

	return posts.At(postsCount - 1)
}
示例#3
0
文件: util.go 项目: ArthurHlt/cg-deck
func FindFirstVisibleOverlayButtonByText(text string, page *agouti.Page) *agouti.Selection {
	allSelections := page.AllByButton(text)
	allSelectionsCount, _ := allSelections.Count()
	for i := 0; i < allSelectionsCount; i++ {
		if visible, _ := allSelections.At(i).Visible(); visible {
			return allSelections.At(i)
		}
	}
	return nil
}
示例#4
0
文件: user.go 项目: 18F/cg-dashboard
func (u User) LoginTo(page *agouti.Page) {
	Expect(page.Navigate(u.testEnvVars.Hostname + "/#/")).To(Succeed())
	var loginLink = page.First(".test-login")
	Eventually(loginLink).Should(BeFound())
	Expect(loginLink.Click()).To(Succeed())
	Eventually(page).Should(HaveURL(u.testEnvVars.LoginURL + "login"))
	Expect(page.FindByName("username").Fill(u.username)).To(Succeed())
	Expect(page.FindByName("password").Fill(u.password)).To(Succeed())
	Expect(page.FindByButton("Sign in").Click()).To(Succeed())
	Eventually(page.FindByButton("Authorize").Click())
	Eventually(page).Should(HaveURL(u.testEnvVars.Hostname + "/#/dashboard"))
}
示例#5
0
func Authenticate(page *agouti.Page, username, password string) {
	header := fmt.Sprintf("%s:%s", username, password)

	page.SetCookie(&http.Cookie{
		Name:  auth.CookieName,
		Value: "Basic " + base64.StdEncoding.EncodeToString([]byte(header)),
	})

	// PhantomJS won't send the cookie on ajax requests if the page is not
	// refreshed
	page.Refresh()
}
示例#6
0
文件: user.go 项目: ArthurHlt/cg-deck
func (u User) LoginTo(page *agouti.Page) {
	Expect(page.Navigate(u.testEnvVars.Hostname)).To(Succeed())
	Expect(page.Find("#login-btn").Click()).To(Succeed())
	Expect(page).To(HaveURL(u.testEnvVars.LoginURL + "login"))
	Expect(page.FindByName("username").Fill(u.username)).To(Succeed())
	Expect(page.FindByName("password").Fill(u.password)).To(Succeed())
	Expect(page.FindByButton("Sign in").Click()).To(Succeed())
	Expect(page).To(HaveURL(u.testEnvVars.Hostname + "/#/dashboard"))
}
示例#7
0
func TestSpec(t *testing.T) {
	Convey("UserRegister", t, func() {
		var agoutiDriver *agouti.WebDriver
		var page *agouti.Page

		session, _ := mgo.Dial("localhost")

		session.DB("TESTGoNuts").DropDatabase()

		agoutiDriver = agouti.PhantomJS()

		So(agoutiDriver.Start(), ShouldBeNil)

		log.Println("Starting")

		go StartMyApp(3232, "TESTGoNuts")

		var err error
		page, err = agoutiDriver.NewPage(agouti.Browser("chrome"))
		So(err, ShouldBeNil)

		Convey("User Registration page", func() {
			Convey("when the user registration is reached", func() {
				Convey("should see the page", func() {
					So(page.Navigate("http://localhost:3232"), ShouldBeNil)

					url, _ := page.URL()
					So(url, ShouldEqual, "http://localhost:3232/")
				})
			})
		})

		Reset(func() {
			So(page.Destroy(), ShouldBeNil)
			So(agoutiDriver.Stop(), ShouldBeNil)
		})
	})
}
示例#8
0
import (
	. "github.com/18F/cg-dashboard/acceptance/util"
	. "github.com/18F/cg-dashboard/acceptance/views"
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
	"github.com/sclevine/agouti"
	. "github.com/sclevine/agouti/matchers"

	"net/http/httptest"
)

var _ = Describe("UserLogin", func() {
	var (
		page        *agouti.Page
		server      *httptest.Server
		testEnvVars AcceptanceTestEnvVars
		user        User
	)

	testEnvVars = AcceptanceTestEnvVars{}
	testEnvVars.LoadTestEnvVars()

	BeforeEach(func() {
		// Start a test server
		server, testEnvVars = startServer()

		// Create a fresh page to navigate.
		page = createPage()

		// Reset page
		resetPage(page, testEnvVars)
示例#9
0
		sqlDB = db.NewSQL(dbLogger, dbConn, bus)
		pipelineDBFactory = db.NewPipelineDBFactory(dbLogger, dbConn, bus, sqlDB)
		atcProcess, atcPort = startATC(atcBin, 1, true, BASIC_AUTH)
		_, err := dbConn.Query(`DELETE FROM teams WHERE name = 'main'`)
		Expect(err).NotTo(HaveOccurred())
	})

	AfterEach(func() {
		ginkgomon.Interrupt(atcProcess)

		Expect(dbConn.Close()).To(Succeed())
		Expect(dbListener.Close()).To(Succeed())
	})

	Describe("pausing a job", func() {
		var page *agouti.Page

		BeforeEach(func() {
			var err error
			page, err = agoutiDriver.NewPage()
			Expect(err).NotTo(HaveOccurred())
		})

		AfterEach(func() {
			Expect(page.Destroy()).To(Succeed())
		})

		homepage := func() string {
			return fmt.Sprintf("http://127.0.0.1:%d/pipelines/%s", atcPort, atc.DefaultPipelineName)
		}
示例#10
0
func Screenshot(page *agouti.Page) {
	page.Screenshot("/tmp/screenshot.png")
}
示例#11
0
文件: user.go 项目: ArthurHlt/cg-deck
func (u User) LogoutOf(page *agouti.Page) {
	Expect(page.Find("#logout-btn").Click()).To(Succeed())
	Eventually(Expect(page).To(HaveURL(u.testEnvVars.LoginURL + "login")))
}
示例#12
0
文件: user.go 项目: ArthurHlt/cg-deck
func (u User) OpenDropdownOfOrgsOn(page *agouti.Page) {
	Eventually(page.Find("#orgs-dropdown-btn")).Should(BeVisible())
	Expect(page.Find("#orgs-dropdown-btn").Click()).To(Succeed())
}
示例#13
0
文件: user.go 项目: ArthurHlt/cg-deck
func (u User) OpenOrgMenuOn(page *agouti.Page) OrgMenu {
	Eventually(page.Find("#org-dropdown-btn")).Should(BeVisible())
	Expect(page.Find("#org-dropdown-btn").Click()).To(Succeed())
	return OrgMenu{page}
}
示例#14
0
func resetPage(page *agouti.Page, testEnvVars AcceptanceTestEnvVars) {
	page.Navigate(testEnvVars.Hostname + "/v2/logout")
	page.Navigate(testEnvVars.Hostname)
}
示例#15
0
	. "github.com/onsi/gomega"
	"github.com/sclevine/agouti"
	. "github.com/sclevine/agouti/matchers"
)

var INTEGRATION_TEST_DATA map[string]string = map[string]string{
	"newUserEmail":         "*****@*****.**",
	"newUserPassword":      "******",
	"fixtureUserEmail":     "*****@*****.**",
	"fixtureUserPassword":  "******",
	"fixtureAdminEmail":    "*****@*****.**",
	"fixtureAdminPassword": "******",
}

var _ = Describe("CasGo", func() {
	var page *agouti.Page

	BeforeEach(func() {
		page, err := agoutiDriver.NewPage()
		Expect(err).NotTo(HaveOccurred())
		page.Navigate(testHTTPServer.URL)
		page.Size(640, 480)
	})

	AfterEach(func() {
		page.Destroy()
	})

	It("Finding the expected title on the index page", func() {
		Expect(page).To(HaveTitle("CasGo"))
	})
示例#16
0
func itShouldBehaveLikeAPage(name string, newPage pageFunc) {
	Describe("integration test for "+name, func() {
		var (
			page      *agouti.Page
			server    *httptest.Server
			submitted bool
		)

		BeforeEach(func() {
			server = httptest.NewServer(http.HandlerFunc(func(response http.ResponseWriter, request *http.Request) {
				if request.Method == "POST" {
					submitted = true
				}
				html, _ := ioutil.ReadFile("test_page.html")
				response.Write(html)
			}))

			var err error
			page, err = newPage()
			Expect(err).NotTo(HaveOccurred())

			Expect(page.Size(640, 480)).To(Succeed())
			Expect(page.Navigate(server.URL)).To(Succeed())
		})

		AfterEach(func() {
			Expect(page.Destroy()).To(Succeed())
			server.Close()
		})

		Describe("Selection interactions", func() {
			It("should support asserting on element identity", func() {
				By("asserting on an element's existence", func() {
					Expect(page.Find("header")).To(BeFound())
					Expect(page.Find("header")).To(HaveCount(1))
					Expect(page.Find("not-a-header")).NotTo(BeFound())
				})

				By("comparing two selections for equality", func() {
					Expect(page.Find("#some_element")).To(EqualElement(page.FindByXPath("//div[@class='some-element']")))
				})
			})

			It("should support selecting elements", func() {
				By("finding an element by selection index", func() {
					Expect(page.All("option").At(0)).To(HaveText("first option"))
					Expect(page.All("select").At(1).First("option")).To(HaveText("third option"))
				})

				By("finding an element by chained selectors", func() {
					Expect(page.Find("header").Find("h1")).To(HaveText("Title"))
					Expect(page.Find("header").FindByXPath("//h1")).To(HaveText("Title"))
				})

				By("finding an element by link text", func() {
					Expect(page.FindByLink("Click Me").Attribute("href")).To(HaveSuffix("#new_page"))
				})

				By("finding an element by label text", func() {
					Expect(page.FindByLabel("Some Label")).To(HaveAttribute("value", "some labeled value"))
					Expect(page.FindByLabel("Some Container Label")).To(HaveAttribute("value", "some embedded value"))
				})

				By("finding an element by button text", func() {
					Expect(page.FindByButton("Some Button")).To(HaveAttribute("name", "some button name"))
					Expect(page.FindByButton("Some Input Button")).To(HaveAttribute("type", "button"))
					Expect(page.FindByButton("Some Submit Button")).To(HaveAttribute("type", "submit"))
				})

				By("finding an element by class", func() {
					Expect(page.FindByClass("some-element")).To(HaveAttribute("id", "some_element"))
				})

				By("finding an element by ID", func() {
					Expect(page.FindByID("some_element")).To(HaveAttribute("class", "some-element"))
				})

				By("finding multiple elements", func() {
					Expect(page.All("select").All("option")).To(BeVisible())
					Expect(page.All("h1,h2")).NotTo(BeVisible())
				})
			})

			It("should support retrieving element properties", func() {
				By("asserting on element text", func() {
					Expect(page.Find("header")).To(HaveText("Title"))
					Expect(page.Find("header")).NotTo(HaveText("Not-Title"))
					Expect(page.Find("header")).To(MatchText("T.+e"))
					Expect(page.Find("header")).NotTo(MatchText("X.+e"))
				})

				By("asserting on whether elements are active", func() {
					Expect(page.Find("#labeled_field")).NotTo(BeActive())
					Expect(page.Find("#labeled_field").Click()).To(Succeed())
					Expect(page.Find("#labeled_field")).To(BeActive())
				})

				By("asserting on element attributes", func() {
					Expect(page.Find("#some_checkbox")).To(HaveAttribute("type", "checkbox"))
				})

				By("asserting on element CSS", func() {
					Expect(page.Find("#some_element")).To(HaveCSS("color", "rgba(0, 0, 255, 1)"))
					Expect(page.Find("#some_element")).To(HaveCSS("color", "rgb(0, 0, 255)"))
					Expect(page.Find("#some_element")).To(HaveCSS("color", "blue"))
				})

				By("asserting on whether elements are selected", func() {
					Expect(page.Find("#some_checkbox")).NotTo(BeSelected())
					Expect(page.Find("#some_selected_checkbox")).To(BeSelected())
				})

				By("asserting on element visibility", func() {
					Expect(page.Find("header h1")).To(BeVisible())
					Expect(page.Find("header h2")).NotTo(BeVisible())
				})

				By("asserting on whether elements are enabled", func() {
					Expect(page.Find("#some_checkbox")).To(BeEnabled())
					Expect(page.Find("#some_disabled_checkbox")).NotTo(BeEnabled())
				})
			})

			It("should support element actions", func() {
				By("clicking on an element", func() {
					checkbox := page.Find("#some_checkbox")
					Expect(checkbox.Click()).To(Succeed())
					Expect(checkbox).To(BeSelected())
					Expect(checkbox.Click()).To(Succeed())
					Expect(checkbox).NotTo(BeSelected())
				})

				By("double-clicking on an element", func() {
					selection := page.Find("#double_click")
					Expect(selection.DoubleClick()).To(Succeed())
					Expect(selection).To(HaveText("double-click success"))
				})

				By("filling out an element", func() {
					Expect(page.Find("#some_input").Fill("some other value")).To(Succeed())
					Expect(page.Find("#some_input")).To(HaveAttribute("value", "some other value"))
				})

				// NOTE: PhantomJS regression causes crash on file upload
				if name != "PhantomJS" {
					By("uploading a file", func() {
						Expect(page.Find("#file_picker").UploadFile("test_page.html")).To(Succeed())
						var result string
						Expect(page.RunScript("return document.getElementById('file_picker').value;", nil, &result)).To(Succeed())
						Expect(result).To(HaveSuffix("test_page.html"))
					})
				}

				By("checking and unchecking a checkbox", func() {
					checkbox := page.Find("#some_checkbox")
					Expect(checkbox.Uncheck()).To(Succeed())
					Expect(checkbox).NotTo(BeSelected())
					Expect(checkbox.Check()).To(Succeed())
					Expect(checkbox).To(BeSelected())
					Expect(checkbox.Uncheck()).To(Succeed())
					Expect(checkbox).NotTo(BeSelected())
				})

				By("selecting an option by text", func() {
					selection := page.Find("#some_select")
					Expect(selection.All("option").At(1)).NotTo(BeSelected())
					Expect(selection.Select("second option")).To(Succeed())
					Expect(selection.All("option").At(1)).To(BeSelected())
				})

				By("submitting a form", func() {
					Expect(page.Find("#some_form").Submit()).To(Succeed())
					Eventually(func() bool { return submitted }).Should(BeTrue())
				})
			})
		})

		Describe("Page interactions", func() {
			It("should support retrieving page properties", func() {
				Expect(page).To(HaveTitle("Page Title"))
				Expect(page).To(HaveURL(server.URL + "/"))
				Expect(page.HTML()).To(ContainSubstring("<h1>Title</h1>"))
			})

			It("should support JavaScript", func() {
				By("waiting for page JavaScript to take effect", func() {
					Expect(page.Find("#some_element")).NotTo(HaveText("some text"))
					Eventually(page.Find("#some_element"), "4s").Should(HaveText("some text"))
					Consistently(page.Find("#some_element")).Should(HaveText("some text"))
				})

				// NOTE: disabled due to recent Firefox regression with passing args
				if name != "Firefox" {
					By("executing provided JavaScript", func() {
						arguments := map[string]interface{}{"elementID": "some_element"}
						var result string
						Expect(page.RunScript("return document.getElementById(elementID).innerHTML;", arguments, &result)).To(Succeed())
						Expect(result).To(Equal("some text"))
					})
				}
			})

			It("should support taking screenshots", func() {
				Expect(page.Screenshot(".test.screenshot.png")).To(Succeed())
				defer os.Remove(".test.screenshot.png")
				file, _ := os.Open(".test.screenshot.png")
				_, err := png.Decode(file)
				Expect(err).NotTo(HaveOccurred())
			})

			It("should support links and navigation", func() {
				By("clicking on a link", func() {
					Expect(page.FindByLink("Click Me").Click()).To(Succeed())
					Expect(page.URL()).To(ContainSubstring("#new_page"))
				})

				By("navigating through browser history", func() {
					Expect(page.Back()).To(Succeed())
					Expect(page.URL()).NotTo(ContainSubstring("#new_page"))
					Expect(page.Forward()).To(Succeed())
					Expect(page.URL()).To(ContainSubstring("#new_page"))
				})

				By("refreshing the page", func() {
					checkbox := page.Find("#some_checkbox")
					Expect(checkbox.Check()).To(Succeed())
					Expect(page.Refresh()).To(Succeed())
					Expect(checkbox).NotTo(BeSelected())
				})
			})

			// NOTE: browsers besides PhantomJS do not support JavaScript logs
			if name == "PhantomJS" {
				It("should support retrieving logs", func() {
					Eventually(page).Should(HaveLoggedInfo("some log"))
					Expect(page).NotTo(HaveLoggedError())
					Eventually(page, "4s").Should(HaveLoggedError("ReferenceError: Can't find variable: doesNotExist\n  (anonymous function)"))
				})
			}

			It("should support switching frames", func() {
				By("switching to an iframe", func() {
					Expect(page.Find("#frame").SwitchToFrame()).To(Succeed())
					Expect(page.Find("body")).To(MatchText("Example Domain"))
				})

				// NOTE: PhantomJS does not support Page.SwitchToParentFrame
				if name != "PhantomJS" {
					By("switching back to the default frame by referring to the parent frame", func() {
						Expect(page.SwitchToParentFrame()).To(Succeed())
						Expect(page.Find("body")).NotTo(MatchText("Example Domain"))
					})

					Expect(page.Find("#frame").SwitchToFrame()).To(Succeed())
				}

				By("switching back to the default frame by referring to the root frame", func() {
					Expect(page.SwitchToRootFrame()).To(Succeed())
					Expect(page.Find("body")).NotTo(MatchText("Example Domain"))
				})
			})

			It("should support switching windows", func() {
				Expect(page.Find("#new_window").Click()).To(Succeed())
				Expect(page).To(HaveWindowCount(2))

				By("switching windows", func() {
					Expect(page.SwitchToWindow("new window")).To(Succeed())
					Expect(page.Find("header")).NotTo(BeFound())
					Expect(page.NextWindow()).To(Succeed())
					Expect(page.Find("header")).To(BeFound())
				})

				By("closing windows", func() {
					Expect(page.CloseWindow()).To(Succeed())
					Expect(page).To(HaveWindowCount(1))
				})
			})

			// NOTE: PhantomJS does not support popup boxes
			if name != "PhantomJS" {
				It("should support popup boxes", func() {
					By("interacting with alert popups", func() {
						Expect(page.Find("#popup_alert").Click()).To(Succeed())
						Expect(page).To(HavePopupText("some alert"))
						Expect(page.ConfirmPopup()).To(Succeed())
					})

					By("interacting with confirm boxes", func() {
						var confirmed bool

						Expect(page.Find("#popup_confirm").Click()).To(Succeed())

						Expect(page.ConfirmPopup()).To(Succeed())
						Expect(page.RunScript("return confirmed;", nil, &confirmed)).To(Succeed())
						Expect(confirmed).To(BeTrue())

						Expect(page.Find("#popup_confirm").Click()).To(Succeed())

						Expect(page.CancelPopup()).To(Succeed())
						Expect(page.RunScript("return confirmed;", nil, &confirmed)).To(Succeed())
						Expect(confirmed).To(BeFalse())
					})

					By("interacting with prompt boxes", func() {
						var promptText string

						Expect(page.Find("#popup_prompt").Click()).To(Succeed())

						Expect(page.EnterPopupText("banana")).To(Succeed())
						Expect(page.ConfirmPopup()).To(Succeed())
						Expect(page.RunScript("return promptText;", nil, &promptText)).To(Succeed())
						Expect(promptText).To(Equal("banana"))
					})
				})
			}

			It("should support manipulating and retrieving cookies", func() {
				Expect(page.SetCookie(&http.Cookie{Name: "webdriver-test-cookie", Value: "webdriver value"})).To(Succeed())
				cookies, err := page.GetCookies()
				Expect(err).NotTo(HaveOccurred())
				cookieNames := []string{cookies[0].Name, cookies[1].Name}
				Expect(cookieNames).To(ConsistOf("webdriver-test-cookie", "browser-test-cookie"))
				Expect(page.DeleteCookie("browser-test-cookie")).To(Succeed())
				Expect(page.GetCookies()).To(HaveLen(1))
				Expect(page.ClearCookies()).To(Succeed())
				Expect(page.GetCookies()).To(HaveLen(0))
			})
		})
	})
}
示例#17
0
func testSelection(browserName string, newPage pageFunc) {
	Describe("selection test for "+browserName, func() {
		var (
			page      *agouti.Page
			server    *httptest.Server
			submitted bool
		)

		BeforeEach(func() {
			server = httptest.NewServer(http.HandlerFunc(func(response http.ResponseWriter, request *http.Request) {
				if request.Method == "POST" {
					submitted = true
				}
				html, _ := ioutil.ReadFile("test_page.html")
				response.Write(html)
			}))

			var err error
			page, err = newPage()
			Expect(err).NotTo(HaveOccurred())

			Expect(page.Size(640, 480)).To(Succeed())
			Expect(page.Navigate(server.URL)).To(Succeed())
		})

		AfterEach(func() {
			Expect(page.Destroy()).To(Succeed())
			server.Close()
		})

		It("should support asserting on element identity", func() {
			By("asserting on an element's existence", func() {
				Expect(page.Find("header")).To(BeFound())
				Expect(page.Find("header")).To(HaveCount(1))
				Expect(page.Find("not-a-header")).NotTo(BeFound())
			})

			By("comparing two selections for equality", func() {
				Expect(page.Find("#some_element")).To(EqualElement(page.FindByXPath("//div[@class='some-element']")))
				Expect(page.Find("#some_element")).NotTo(EqualElement(page.Find("header")))
			})
		})

		It("should support moving the mouse pointer over a selected element", func() {
			Expect(page.Find("#some_checkbox").MouseToElement()).To(Succeed())
			Expect(page.Click(agouti.SingleClick, agouti.LeftButton)).To(Succeed())
			Expect(page.Find("#some_checkbox")).To(BeSelected())
		})

		It("should support selecting elements", func() {
			By("finding an element by selection index", func() {
				Expect(page.All("option").At(0)).To(HaveText("first option"))
				Expect(page.All("select").At(1).First("option")).To(HaveText("third option"))
			})

			By("finding an element by chained selectors", func() {
				Expect(page.Find("header").Find("h1")).To(HaveText("Title"))
				Expect(page.Find("header").FindByXPath("//h1")).To(HaveText("Title"))
			})

			By("finding an element by link text", func() {
				Expect(page.FindByLink("Click Me").Attribute("href")).To(HaveSuffix("#new_page"))
			})

			By("finding an element by label text", func() {
				Expect(page.FindByLabel("Some Label")).To(HaveAttribute("value", "some labeled value"))
				Expect(page.FindByLabel("Some Container Label")).To(HaveAttribute("value", "some embedded value"))
			})

			By("finding an element by button text", func() {
				Expect(page.FindByButton("Some Button")).To(HaveAttribute("name", "some button name"))
				Expect(page.FindByButton("Some Input Button")).To(HaveAttribute("type", "button"))
				Expect(page.FindByButton("Some Submit Button")).To(HaveAttribute("type", "submit"))
			})

			By("finding an element by name attibute", func() {
				Expect(page.FindByName("some button name")).To(HaveAttribute("name", "some button name"))
			})

			By("finding multiple elements", func() {
				Expect(page.All("select").All("option")).To(BeVisible())
				Expect(page.All("h1,h2")).NotTo(BeVisible())
			})
		})

		It("should support retrieving element properties", func() {
			By("asserting on element text", func() {
				Expect(page.Find("header")).To(HaveText("Title"))
				Expect(page.Find("header")).NotTo(HaveText("Not-Title"))
				Expect(page.Find("header")).To(MatchText("T.+e"))
				Expect(page.Find("header")).NotTo(MatchText("X.+e"))
			})

			By("asserting on whether elements are active", func() {
				Expect(page.Find("#labeled_field")).NotTo(BeActive())
				Expect(page.Find("#labeled_field").Click()).To(Succeed())
				Expect(page.Find("#labeled_field")).To(BeActive())
			})

			By("asserting on element attributes", func() {
				Expect(page.Find("#some_checkbox")).To(HaveAttribute("type", "checkbox"))
			})

			By("asserting on element CSS", func() {
				Expect(page.Find("#some_element")).To(HaveCSS("color", "rgba(0, 0, 255, 1)"))
				Expect(page.Find("#some_element")).To(HaveCSS("color", "rgb(0, 0, 255)"))
				Expect(page.Find("#some_element")).To(HaveCSS("color", "blue"))
			})

			By("asserting on whether elements are selected", func() {
				Expect(page.Find("#some_checkbox")).NotTo(BeSelected())
				Expect(page.Find("#some_selected_checkbox")).To(BeSelected())
			})

			By("asserting on element visibility", func() {
				Expect(page.Find("header h1")).To(BeVisible())
				Expect(page.Find("header h2")).NotTo(BeVisible())
			})

			By("asserting on whether elements are enabled", func() {
				Expect(page.Find("#some_checkbox")).To(BeEnabled())
				Expect(page.Find("#some_disabled_checkbox")).NotTo(BeEnabled())
			})
		})

		It("should support element actions", func() {
			By("clicking on an element", func() {
				checkbox := page.Find("#some_checkbox")
				Expect(checkbox.Click()).To(Succeed())
				Expect(checkbox).To(BeSelected())
				Expect(checkbox.Click()).To(Succeed())
				Expect(checkbox).NotTo(BeSelected())
			})

			By("double-clicking on an element", func() {
				selection := page.Find("#double_click")
				Expect(selection.DoubleClick()).To(Succeed())
				Expect(selection).To(HaveText("double-click success"))
			})

			By("filling out an element", func() {
				Expect(page.Find("#some_input").Fill("some other value")).To(Succeed())
				Expect(page.Find("#some_input")).To(HaveAttribute("value", "some other value"))
			})

			// NOTE: PhantomJS regression causes crash on file upload
			if browserName != "PhantomJS" {
				By("uploading a file", func() {
					Expect(page.Find("#file_picker").UploadFile("test_page.html")).To(Succeed())
					var result string
					Expect(page.RunScript("return document.getElementById('file_picker').value;", nil, &result)).To(Succeed())
					Expect(result).To(HaveSuffix("test_page.html"))
				})
			}

			By("checking and unchecking a checkbox", func() {
				checkbox := page.Find("#some_checkbox")
				Expect(checkbox.Uncheck()).To(Succeed())
				Expect(checkbox).NotTo(BeSelected())
				Expect(checkbox.Check()).To(Succeed())
				Expect(checkbox).To(BeSelected())
				Expect(checkbox.Uncheck()).To(Succeed())
				Expect(checkbox).NotTo(BeSelected())
			})

			By("selecting an option by text", func() {
				selection := page.Find("#some_select")
				Expect(selection.All("option").At(1)).NotTo(BeSelected())
				Expect(selection.Select("second option")).To(Succeed())
				Expect(selection.All("option").At(1)).To(BeSelected())
			})

			By("submitting a form", func() {
				Expect(page.Find("#some_form").Submit()).To(Succeed())
				Eventually(func() bool { return submitted }).Should(BeTrue())
			})
		})
	})
}
示例#18
0
		Expect(resp.StatusCode).To(Equal(200))
		By("checking the CORS response")
		Expect(resp.Header.Get("Access-Control-Allow-Origin")).To(Equal("*"))

		By("checking the original request is included with the response")
		Expect(responseData.Request).To(Equal(requestData))

		By("checking the mean instances per host")
		Expect(responseData.MeanInstancesPerHost).To(Equal(20.0))

		By("checking the mean instances per host")
		Expect(responseData.Apps).To(HaveLen(10000))
	})

	Describe("Web form", func() {
		var page *agouti.Page

		BeforeEach(func() {
			var err error
			page, err = agoutiDriver.NewPage()
			Expect(err).NotTo(HaveOccurred())
		})

		AfterEach(func() {
			Expect(page.Destroy()).To(Succeed())
		})
		It("provide a web interface to the API", func() {
			By("having a root page", func() {
				Expect(page.Navigate("http://" + address)).To(Succeed())
			})
package main_test

import (
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
	"github.com/sclevine/agouti"
	. "github.com/sclevine/agouti/matchers"
)

var _ = Describe("Angular", func() {
	var page *agouti.Page

	It("should redirect / to #/", func() {
		var err error
		page, err = agoutiDriver.NewPage()
		Expect(err).NotTo(HaveOccurred())
		Expect(page.Navigate("http://localhost:8080")).To(Succeed())
		Expect(page).To(HaveURL("http://localhost:8080/#/"))
	})

	Describe("Phone list view", func() {
		BeforeEach(func() {
			var err error
			page, err = agoutiDriver.NewPage()
			Expect(err).NotTo(HaveOccurred())
			Expect(page.Navigate("http://localhost:8080/#/phones")).To(Succeed())
		})

		AfterEach(func() {
			Expect(page.Destroy()).To(Succeed())
		})
示例#20
0
package potato_test

import (
	"time"

	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
	"github.com/sclevine/agouti"
	. "github.com/sclevine/agouti/matchers"
)

var _ = Describe("UserLogin", func() {
	var page *agouti.Page
	salutations := "Good morning at " + time.Now().String()

	BeforeEach(func() {
		var err error
		page, err = agoutiDriver.NewPage(agouti.Browser("firefox"))
		Expect(err).NotTo(HaveOccurred())
		page.SetImplicitWait(10000)
	})

	AfterEach(func() {
		Expect(page.Destroy()).To(Succeed())
	})

	It("should be able to add an entry", func() {
		By("redirecting the user to the page", func() {
			Expect(page.Navigate("http://localhost:8083/")).To(Succeed())
			Expect(page).To(HaveURL("http://localhost:8083/"))
		})
示例#21
0
		sqlDB = db.NewSQL(dbLogger, dbConn, bus)
		pipelineDBFactory = db.NewPipelineDBFactory(dbLogger, dbConn, bus, sqlDB)
		atcProcess, atcPort = startATC(atcBin, 1)
	})

	AfterEach(func() {
		ginkgomon.Interrupt(atcProcess)

		Ω(dbConn.Close()).Should(Succeed())
		Ω(dbListener.Close()).Should(Succeed())

		postgresRunner.DropTestDB()
	})

	Describe("viewing a jobs builds", func() {
		var page *agouti.Page

		BeforeEach(func() {
			var err error
			page, err = agoutiDriver.NewPage()
			Expect(err).NotTo(HaveOccurred())
		})

		AfterEach(func() {
			Expect(page.Destroy()).To(Succeed())
		})

		homepage := func() string {
			return fmt.Sprintf("http://127.0.0.1:%d/pipelines/%s", atcPort, atc.DefaultPipelineName)
		}
示例#22
0
文件: user.go 项目: ArthurHlt/cg-deck
func (u User) SelectOrgFromDropdown(page *agouti.Page, orgName string) {
	Eventually(page.Find("#orgs-dropdown-menu")).Should(BeVisible())
	Expect(page.FindByLink(orgName)).To(BeFound())
	Expect(page.FindByLink(orgName).Click()).To(Succeed())
}
示例#23
0
import (
	. "github.com/18F/cf-deck/acceptance/util"
	. "github.com/18F/cf-deck/acceptance/views"
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
	"github.com/sclevine/agouti"
	"net/http/httptest"
)

var _ = Describe("Services", func() {
	var (
		page        *agouti.Page
		server      *httptest.Server
		testEnvVars AcceptanceTestEnvVars
		user        User
		spaces      Spaces
		space       Space
		services    Services
		app         App
		marketplace Marketplace
	)

	testEnvVars = AcceptanceTestEnvVars{}
	testEnvVars.LoadTestEnvVars()

	BeforeEach(func() {
		// Start a test server
		server, testEnvVars = startServer()

		// Create a fresh page to navigate.
		page = createPage()
示例#24
0
	BeforeEach(func() {
		args = []string{}
	})

	Describe("long-running operation", func() {
		var (
			session *gexec.Session
		)

		AfterEach(func() {
			session.Terminate()
		})

		Describe("UI", func() {
			var page *agouti.Page

			BeforeEach(func() {
				var err error
				page, err = agoutiDriver.NewPage()
				Expect(err).NotTo(HaveOccurred())
			})

			AfterEach(func() {
				Expect(page.Destroy()).To(Succeed())
			})

			Context("when dev is enabled", func() {
				BeforeEach(func() {
					args = append(args, fmt.Sprintf("-httpPort=%d", httpPort))
					args = append(args, "-dev")
示例#25
0
		sqlDB = db.NewSQL(dbLogger, dbConn, bus)
		pipelineDBFactory = db.NewPipelineDBFactory(dbLogger, dbConn, bus, sqlDB)
		atcProcess, atcPort = startATC(atcBin, 1, true, BASIC_AUTH)
		err := sqlDB.DeleteTeamByName(atc.DefaultTeamName)
		Expect(err).NotTo(HaveOccurred())
	})

	AfterEach(func() {
		ginkgomon.Interrupt(atcProcess)

		Expect(dbConn.Close()).To(Succeed())
		Expect(dbListener.Close()).To(Succeed())
	})

	Describe("pausing a pipeline", func() {
		var page *agouti.Page

		BeforeEach(func() {
			var err error
			page, err = agoutiDriver.NewPage()
			Expect(err).NotTo(HaveOccurred())
		})

		AfterEach(func() {
			Expect(page.Destroy()).To(Succeed())
		})

		homepage := func() string {
			return fmt.Sprintf("http://127.0.0.1:%d/", atcPort)
		}
示例#26
0
package main_test

import (
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
	"github.com/sclevine/agouti"
	. "github.com/sclevine/agouti/matchers"
)

var _ = Describe("Home", func() {
	var page *agouti.Page

	BeforeEach(func() {
		var err error
		page, err = agoutiDriver.NewPage()
		Expect(err).NotTo(HaveOccurred())
	})

	AfterEach(func() {
		Expect(page.Destroy()).To(Succeed())
	})

	It("Should redirect / to #/", func() {
		var err error
		page, err = agoutiDriver.NewPage()
		Expect(err).NotTo(HaveOccurred())
		Expect(page.Navigate("http://localhost:8080")).To(Succeed())
		Expect(page).To(HaveURL("http://localhost:8080/#/"))
	})
})
示例#27
0
package integration_test

import (
	"github.com/craigfurman/woodhouse-ci/web/pageobjects"
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
	"github.com/sclevine/agouti"
	. "github.com/sclevine/agouti/matchers"
)

var _ = Describe("ListJobs", func() {
	var page *agouti.Page

	BeforeEach(func() {
		var err error
		page, err = agoutiDriver.NewPage()
		Expect(err).NotTo(HaveOccurred())
	})

	AfterEach(func() {
		Expect(page.Destroy()).To(Succeed())
	})

	It("shows a list of jobs", func() {
		By("root url redirects to jobs page", func() {
			Expect(page.Navigate("http://localhost:3001")).To(Succeed())
			Eventually(page.Find("a#newJob")).Should(BeFound())
		})

		By("creating a new job", func() {
			pageobjects.NewListJobsPage(page).GoToCreateNewJob().CreateJob("Jerb", "echo hello", "busybox", "")
示例#28
0
package acceptance

import (
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
	"github.com/sclevine/agouti"
	. "github.com/sclevine/agouti/matchers"

	"net/http/httptest"
)

var _ = Describe("UserLogin", func() {
	var (
		page        *agouti.Page
		server      *httptest.Server
		testEnvVars acceptanceTestEnvVars
	)

	testEnvVars = acceptanceTestEnvVars{}
	testEnvVars.loadTestEnvVars()

	BeforeEach(func() {
		// Start a test server
		server, testEnvVars = startServer()

		// Create a fresh page to navigate.
		page = createPage()
	})

	It("should redirect users to login page if accessing privileged dashboard page without first logining in.", func() {
示例#29
0
		bus := db.NewNotificationsBus(dbListener, dbConn)
		sqlDB = db.NewSQL(dbLogger, dbConn, bus)
		pipelineDBFactory = db.NewPipelineDBFactory(dbLogger, dbConn, bus, sqlDB)

		atcProcess, atcPort = startATC(atcBin, 1)
	})

	AfterEach(func() {
		ginkgomon.Interrupt(atcProcess)

		Expect(dbConn.Close()).To(Succeed())
		Expect(dbListener.Close()).To(Succeed())
	})

	Describe("viewing a list of builds", func() {
		var page *agouti.Page
		var pipelineDB db.PipelineDB

		BeforeEach(func() {
			var err error
			page, err = agoutiDriver.NewPage()
			Expect(err).NotTo(HaveOccurred())
		})

		AfterEach(func() {
			Expect(page.Destroy()).To(Succeed())
		})

		homepage := func() string {
			return fmt.Sprintf("http://127.0.0.1:%d", atcPort)
		}
示例#30
0
		pipelineDBFactory = db.NewPipelineDBFactory(dbLogger, dbConn, bus, sqlDB)

		atcProcess, atcPort = startATC(atcBin, 1)
	})

	AfterEach(func() {
		ginkgomon.Interrupt(atcProcess)

		Ω(dbConn.Close()).Should(Succeed())
		Ω(dbListener.Close()).Should(Succeed())

		postgresRunner.DropTestDB()
	})

	Describe("aborting a build", func() {
		var page *agouti.Page
		var pipelineDB db.PipelineDB

		BeforeEach(func() {
			var err error
			page, err = agoutiDriver.NewPage()
			Expect(err).NotTo(HaveOccurred())
		})

		AfterEach(func() {
			Expect(page.Destroy()).To(Succeed())
		})

		homepage := func() string {
			return fmt.Sprintf("http://127.0.0.1:%d/pipelines/main", atcPort)
		}