func (w *Worker) LoginWithSuccess(from *ip.IP, user *user.User) error { defer w.Reset() defer func() { user.LastLoginedIP = from user.LastLoginedTime = time.Now() }() topPage := NewScenario("GET", "/") topPage.IP = from topPage.ExpectedStatusCode = 200 topPage.ExpectedSelectors = []string{"//input[@name='login']", "//input[@name='password']", "//*[@type='submit']"} topPage.ExpectedAssets = defaultExpectedAssets err := topPage.Play(w) if err != nil { return err } login := NewScenario("POST", "/login") login.IP = from login.PostData = map[string]string{ "login": user.Name, "password": user.RightPassword, } login.ExpectedStatusCode = 200 login.ExpectedLocation = "/mypage" if user.LastLoginedIP != nil { login.ExpectedHTML = map[string]string{ "//*[@id='last-logined-ip']": user.LastLoginedIP.String(), } login.ExpectedLastLoginedAt = user.LastLoginedTime } login.ExpectedAssets = defaultExpectedAssets err = login.Play(w) from.Success() user.Success() return err }