'#name', 'description' => '#description', 'members' => '#members', 'activeMember' => 'div.control-group.team .swarm-add-member ul.typeahead li.active', // note that these 3 selectors are expected to return multiple results 'selectedMembers' => 'div.control-group.team div.controls.team-list div.member-button button.member-name', 'removeSelectedMembers' => 'div.control-group.team div.controls.team-list div.member-button button.member-remove', 'hiddenMembers' => 'div.control-group.team div.controls.team-list div.member-button input.member-id', 'addBranchLink' => 'a.swarm-branch-group[name="branches"]', 'openAddBranchButton' => 'div.branch-button div.btn-group.open button.dropdown-toggle.btn-danger', 'addBranchDialog' => 'div.branch-button div.dropdown-menu.dropdown-subform', 'addBranchName' => 'div.branch-button div.dropdown-menu.dropdown-subform input[type="text"]', 'addBranchPaths' => 'div.branch-button div.dropdown-menu.dropdown-subform textarea', 'addBranchDone' => 'div.branch-button div.dropdown-menu.dropdown-subform button.close-branch-btn', 'addBranchRemove' => 'div.branch-button div.dropdown-menu.dropdown-subform button.clear-branch-btn', 'jobFilter' => '#jobview', 'enableTests' => '#testsEnabled', 'testsUrl' => 'div.automated-tests-control textarea', 'enableDeploy' => '#deployEnabled', 'deployUrl' => 'div.automated-deployment-control textarea', 'save' => 'div.project-edit form div.control-group.group-buttons button[type="submit"]', 'cancel' => 'div.project-edit form div.control-group.group-buttons button[type="button"]', 'alertError' => 'div.alert.alert-error', 'inputError' => 'div.control-group.error', ); public $url = 'project/add'; public $title = 'Swarm - Add Project'; /** * Submits the add project from and asserts based on the response. * * @param boolean $expectedSuccess Whether or not we expect this form submission to succeed. * @return \Pages\AddProjectPage */ public function submitProjectForm($expectedSuccess = true) { $projectName = $this->name->value(); $this->save->click(); $page = $this; $projectFormTest = function() use ($page, $expectedSuccess) { // Return false if page-level error notice is unexpectedly displayed. // Note that this usually indicates a system-level issue, such as no // connection to perforce, no permission, etc. $elements = $page->test->fetchElementsBy('css selector', $page->locators['alertError']); if (!empty($elements)) { return false; } // Otherwise check to ensure the the form completed as expected by // looking for elements indicating error. $elements = $page->test->fetchElementsBy('css selector', $page->locators['inputError']); return ((empty($elements) && $expectedSuccess) || (!empty($elements) && !$expectedSuccess)); }; $this->test->spinAssert("Project was not created as expected.", $projectFormTest); return new ProjectPage($this->test, $projectName); } public function addMember($name) { if (!array_key_exists($name, $this->test->p4users)) { throw new Exception ('Invalid member name "' . $name . '", ' . __LINE__ . ' of ' . __FILE__); } $this->members = substr($this->test->p4users[$name]['User'], 0, 1); $this->activeMember->click(); return $this; } }