From 0146c04460705d07ed53683154d9a25d38a827d0 Mon Sep 17 00:00:00 2001 From: AlexeyK Date: Thu, 29 Jan 2026 20:41:04 -0800 Subject: [PATCH 1/2] RF | Delete MoveTrait, make MovePage common https://github.com/RedRoverSchool/JenkinsQA_Java_2025_fall/issues/1909 --- src/test/java/school/redrover/FolderTest.java | 4 +- .../sidebar/BaseSidebarComponent.java | 15 ++++++- .../sidebar/FreestyleProjectSidebar.java | 7 +-- .../sidebar/MultiBranchProjectSidebar.java | 9 +--- .../sidebar/MultiConfigProjectSidebar.java | 8 +--- .../sidebar/OrganizationFolderSidebar.java | 9 +--- .../sidebar/PipelineProjectSidebar.java | 9 +--- .../java/school/redrover/page/HomePage.java | 4 +- .../java/school/redrover/page/MovePage.java | 40 ----------------- .../school/redrover/page/ProjectMovePage.java | 45 +++++++++++++++++++ .../project_sidebar/SidebarMoveTrait.java | 18 -------- 11 files changed, 67 insertions(+), 101 deletions(-) delete mode 100644 src/test/java/school/redrover/page/MovePage.java create mode 100644 src/test/java/school/redrover/page/ProjectMovePage.java delete mode 100644 src/test/java/school/redrover/trait/project_sidebar/SidebarMoveTrait.java diff --git a/src/test/java/school/redrover/FolderTest.java b/src/test/java/school/redrover/FolderTest.java index 7637ca616..f3149b018 100644 --- a/src/test/java/school/redrover/FolderTest.java +++ b/src/test/java/school/redrover/FolderTest.java @@ -1,7 +1,6 @@ package school.redrover; import org.testng.Assert; -import org.testng.annotations.Ignore; import org.testng.annotations.Test; import school.redrover.common.BaseTest; import school.redrover.page.FolderStatusPage; @@ -197,7 +196,8 @@ public void testPutItemsToFolder() { .openDropdownMenu(itemName) .clickMoveInDropdownMenu() .selectDestinationFolder(FOLDER_NAME) - .clickMoveButtonAndGoHome(); + .clickMoveButton() + .gotoHomePage(); } List folderItemList = new HomePage(getDriver()) diff --git a/src/test/java/school/redrover/component/project/status_page/sidebar/BaseSidebarComponent.java b/src/test/java/school/redrover/component/project/status_page/sidebar/BaseSidebarComponent.java index 5bdcb3df5..cf6bb4df6 100644 --- a/src/test/java/school/redrover/component/project/status_page/sidebar/BaseSidebarComponent.java +++ b/src/test/java/school/redrover/component/project/status_page/sidebar/BaseSidebarComponent.java @@ -6,6 +6,7 @@ import school.redrover.component.BaseComponent; import school.redrover.page.BaseProjectConfigurationPage; import school.redrover.page.BaseProjectStatusPage; +import school.redrover.page.ProjectMovePage; import school.redrover.page.ProjectRenamingPage; import java.util.function.Function; @@ -23,11 +24,15 @@ public abstract class BaseSidebarComponent< @FindBy(xpath = "//a[contains(@href, '/configure')]") private WebElement configureMenuItem; + @FindBy(xpath = "//a[contains(., 'Delete')]") + private WebElement deleteMenuItem; + + @FindBy(xpath = "//a[contains(., 'Move')]") + private WebElement moveMenuItem; + @FindBy(xpath = "//a[contains(., 'Rename')]") private WebElement renameMenuItem; - @FindBy(xpath = "//a[contains(., 'Delete')]") - private WebElement deleteMenuItem; private final Function projectStatusPageFactory; @@ -58,6 +63,12 @@ public ProjectStatusPage clickSidebarDelete() { return getProjectStatusPage().waitUntilPageLoadJS(); } + public ProjectMovePage clickSidebarMove() { + moveMenuItem.click(); + + return new ProjectMovePage<>(getDriver(), projectStatusPageFactory).waitUntilPageLoadJS(); + } + public ProjectRenamingPage clickSidebarRename() { renameMenuItem.click(); diff --git a/src/test/java/school/redrover/component/project/status_page/sidebar/FreestyleProjectSidebar.java b/src/test/java/school/redrover/component/project/status_page/sidebar/FreestyleProjectSidebar.java index 4ad6dbcc7..20649d091 100644 --- a/src/test/java/school/redrover/component/project/status_page/sidebar/FreestyleProjectSidebar.java +++ b/src/test/java/school/redrover/component/project/status_page/sidebar/FreestyleProjectSidebar.java @@ -8,7 +8,7 @@ public class FreestyleProjectSidebar extends BaseSidebarComponent< FreestyleProjectSidebar, FreestyleProjectStatusPage, FreestyleProjectConfigurationPage> implements SidebarChangesTrait, SidebarWorkspaceTrait, - SidebarBuildNowTrait, SidebarMoveTrait, SidebarCredentialsTrait { + SidebarBuildNowTrait, SidebarCredentialsTrait { public FreestyleProjectSidebar(WebDriver driver) { super(driver, FreestyleProjectStatusPage::new); @@ -39,11 +39,6 @@ public FreestyleProjectCredentialsPage getProjectCredentialsPage() { return new FreestyleProjectCredentialsPage(getDriver()); } - @Override - public FreestyleProjectMovePage getProjectMovePage() { - return new FreestyleProjectMovePage(getDriver()); - } - @Override public FreestyleProjectWorkspacePage getProjectWorkspacePage() { return new FreestyleProjectWorkspacePage(getDriver()); diff --git a/src/test/java/school/redrover/component/project/status_page/sidebar/MultiBranchProjectSidebar.java b/src/test/java/school/redrover/component/project/status_page/sidebar/MultiBranchProjectSidebar.java index eaaa1388c..d6105e25b 100644 --- a/src/test/java/school/redrover/component/project/status_page/sidebar/MultiBranchProjectSidebar.java +++ b/src/test/java/school/redrover/component/project/status_page/sidebar/MultiBranchProjectSidebar.java @@ -4,13 +4,11 @@ import school.redrover.page.*; import school.redrover.trait.project_sidebar.SidebarBuildHistoryTrait; import school.redrover.trait.project_sidebar.SidebarCredentialsTrait; -import school.redrover.trait.project_sidebar.SidebarMoveTrait; public class MultiBranchProjectSidebar extends BaseSidebarComponent< MultiBranchProjectSidebar, MultibranchProjectStatusPage, MultibranchProjectConfigurationPage> - implements SidebarBuildHistoryTrait, SidebarMoveTrait, - SidebarCredentialsTrait { + implements SidebarBuildHistoryTrait, SidebarCredentialsTrait { public MultiBranchProjectSidebar(WebDriver driver) { super(driver, MultibranchProjectStatusPage::new); @@ -40,9 +38,4 @@ public MultiBranchProjectBuildHistoryPage getProjectBuildHistoryPage() { public MultiBranchProjectCredentialsPage getProjectCredentialsPage() { return new MultiBranchProjectCredentialsPage(getDriver()); } - - @Override - public MultiBranchProjectMovePage getProjectMovePage() { - return new MultiBranchProjectMovePage(getDriver()); - } } diff --git a/src/test/java/school/redrover/component/project/status_page/sidebar/MultiConfigProjectSidebar.java b/src/test/java/school/redrover/component/project/status_page/sidebar/MultiConfigProjectSidebar.java index f3995aee6..5112b8f39 100644 --- a/src/test/java/school/redrover/component/project/status_page/sidebar/MultiConfigProjectSidebar.java +++ b/src/test/java/school/redrover/component/project/status_page/sidebar/MultiConfigProjectSidebar.java @@ -8,8 +8,7 @@ public class MultiConfigProjectSidebar extends BaseSidebarComponent implements SidebarChangesTrait, SidebarWorkspaceTrait, - SidebarBuildNowTrait, SidebarMoveTrait, - SidebarCredentialsTrait { + SidebarBuildNowTrait, SidebarCredentialsTrait { public MultiConfigProjectSidebar(WebDriver driver) { super(driver, MultiConfigProjectStatusPage::new); @@ -40,11 +39,6 @@ public MultiConfigProjectCredentialsPage getProjectCredentialsPage() { return new MultiConfigProjectCredentialsPage(getDriver()); } - @Override - public MultiConfigProjectMovePage getProjectMovePage() { - return new MultiConfigProjectMovePage(getDriver()); - } - @Override public MultiConfigProjectWorkspacePage getProjectWorkspacePage() { return new MultiConfigProjectWorkspacePage(getDriver()); diff --git a/src/test/java/school/redrover/component/project/status_page/sidebar/OrganizationFolderSidebar.java b/src/test/java/school/redrover/component/project/status_page/sidebar/OrganizationFolderSidebar.java index 3d6f4c333..b70d9fcd3 100644 --- a/src/test/java/school/redrover/component/project/status_page/sidebar/OrganizationFolderSidebar.java +++ b/src/test/java/school/redrover/component/project/status_page/sidebar/OrganizationFolderSidebar.java @@ -4,13 +4,11 @@ import school.redrover.page.*; import school.redrover.trait.project_sidebar.SidebarBuildHistoryTrait; import school.redrover.trait.project_sidebar.SidebarCredentialsTrait; -import school.redrover.trait.project_sidebar.SidebarMoveTrait; public class OrganizationFolderSidebar extends BaseSidebarComponent - implements SidebarBuildHistoryTrait, SidebarMoveTrait, - SidebarCredentialsTrait { + implements SidebarBuildHistoryTrait, SidebarCredentialsTrait { public OrganizationFolderSidebar(WebDriver driver) { super(driver, OrganizationFolderStatusPage::new); @@ -40,9 +38,4 @@ public OrganizationFolderBuildHistoryPage getProjectBuildHistoryPage() { public OrganizationFolderCredentialsPage getProjectCredentialsPage() { return null; } - - @Override - public OrganizationFolderMovePage getProjectMovePage() { - return null; - } } diff --git a/src/test/java/school/redrover/component/project/status_page/sidebar/PipelineProjectSidebar.java b/src/test/java/school/redrover/component/project/status_page/sidebar/PipelineProjectSidebar.java index 5f11a59e5..4ebe81fa6 100644 --- a/src/test/java/school/redrover/component/project/status_page/sidebar/PipelineProjectSidebar.java +++ b/src/test/java/school/redrover/component/project/status_page/sidebar/PipelineProjectSidebar.java @@ -5,13 +5,11 @@ import school.redrover.trait.project_sidebar.SidebarBuildNowTrait; import school.redrover.trait.project_sidebar.SidebarChangesTrait; import school.redrover.trait.project_sidebar.SidebarCredentialsTrait; -import school.redrover.trait.project_sidebar.SidebarMoveTrait; public class PipelineProjectSidebar extends BaseSidebarComponent - implements SidebarChangesTrait, SidebarBuildNowTrait, - SidebarMoveTrait, SidebarCredentialsTrait { + implements SidebarChangesTrait, SidebarBuildNowTrait, SidebarCredentialsTrait { public PipelineProjectSidebar(WebDriver driver) { super(driver, PipelineProjectStatusPage::new); @@ -41,9 +39,4 @@ public PipelineProjectChangesPage getProjectChangesPage() { public PipelineProjectCredentialsPage getProjectCredentialsPage() { return new PipelineProjectCredentialsPage(getDriver()); } - - @Override - public PipelineProjectMovePage getProjectMovePage() { - return new PipelineProjectMovePage(getDriver()); - } } diff --git a/src/test/java/school/redrover/page/HomePage.java b/src/test/java/school/redrover/page/HomePage.java index 64101a7a4..bbccc32b0 100644 --- a/src/test/java/school/redrover/page/HomePage.java +++ b/src/test/java/school/redrover/page/HomePage.java @@ -174,9 +174,9 @@ public HomePage openDropdownMenu(String itemName) { return this; } - public MovePage clickMoveInDropdownMenu() { + public ProjectMovePage clickMoveInDropdownMenu() { getWait2().until(ExpectedConditions.elementToBeClickable(moveDropDownMenuItem)).click(); - return new MovePage(getDriver()).waitUntilPageLoadJS(); + return new ProjectMovePage<>(getDriver(), FolderStatusPage::new).waitUntilPageLoadJS(); } public PipelineProjectSyntaxPage clickPipelineSyntaxInDropdownMenu() { diff --git a/src/test/java/school/redrover/page/MovePage.java b/src/test/java/school/redrover/page/MovePage.java deleted file mode 100644 index 9c646ea17..000000000 --- a/src/test/java/school/redrover/page/MovePage.java +++ /dev/null @@ -1,40 +0,0 @@ -package school.redrover.page; - -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; -import org.openqa.selenium.support.ui.ExpectedConditions; -import org.openqa.selenium.support.ui.Select; -import school.redrover.common.BasePage; - - -public class MovePage extends BasePage { - - @FindBy(className = "jenkins-select__input") - private WebElement selectFolder; - - @FindBy(name = "Submit") - private WebElement moveButton; - - public MovePage(WebDriver driver) { - super(driver); - } - - @Override - public MovePage getPage() { - return this; - } - - public MovePage selectDestinationFolder(String folderName) { - new Select(selectFolder).selectByVisibleText("Jenkins » %s".formatted(folderName)); - - return this; - } - - public void clickMoveButtonAndGoHome() { - String urlBeforeMoving = getDriver().getCurrentUrl(); - moveButton.click(); - getWait5().until(ExpectedConditions.not(ExpectedConditions.urlToBe(urlBeforeMoving))); - gotoHomePage(); - } -} diff --git a/src/test/java/school/redrover/page/ProjectMovePage.java b/src/test/java/school/redrover/page/ProjectMovePage.java new file mode 100644 index 000000000..87c772293 --- /dev/null +++ b/src/test/java/school/redrover/page/ProjectMovePage.java @@ -0,0 +1,45 @@ +package school.redrover.page; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.ui.Select; +import school.redrover.common.BasePage; + +import java.util.function.Function; + + +public class ProjectMovePage> + extends BasePage> { + + @FindBy(className = "jenkins-select__input") + private WebElement selectFolder; + + @FindBy(name = "Submit") + private WebElement moveButton; + + private final Function projectStatusPageFactory; + + + public ProjectMovePage(WebDriver driver, Function projectStatusPageFactory) { + super(driver); + this.projectStatusPageFactory = projectStatusPageFactory; + } + + @Override + public ProjectMovePage getPage() { + return this; + } + + public ProjectMovePage selectDestinationFolder(String folderName) { + new Select(selectFolder).selectByVisibleText("Jenkins » %s".formatted(folderName)); + + return this; + } + + public ProjectStatusPage clickMoveButton() { + moveButton.click(); + + return projectStatusPageFactory.apply(getDriver()).waitUntilPageLoadJS(); + } +} diff --git a/src/test/java/school/redrover/trait/project_sidebar/SidebarMoveTrait.java b/src/test/java/school/redrover/trait/project_sidebar/SidebarMoveTrait.java deleted file mode 100644 index 7a2d40e75..000000000 --- a/src/test/java/school/redrover/trait/project_sidebar/SidebarMoveTrait.java +++ /dev/null @@ -1,18 +0,0 @@ -package school.redrover.trait.project_sidebar; - -import org.openqa.selenium.By; - -import school.redrover.common.BasePage; -import school.redrover.trait.BaseTrait; - - -public interface SidebarMoveTrait> extends BaseTrait { - - ProjectMovePage getProjectMovePage(); - - default ProjectMovePage clickSidebarMove() { - getDriver().findElement(By.xpath("//a[contains(., 'Move')]")).click(); - - return getProjectMovePage().waitUntilPageLoadJS(); - } -} From abbdaf26e0dcf1d147abf7a96b0305de29167019 Mon Sep 17 00:00:00 2001 From: AlexeyK Date: Thu, 29 Jan 2026 22:18:28 -0800 Subject: [PATCH 2/2] RF | ProjectRenamingPage, BaseSidebarComponent https://github.com/RedRoverSchool/JenkinsQA_Java_2025_fall/issues/1911 --- .../sidebar/BaseSidebarComponent.java | 2 +- .../redrover/page/ProjectRenamingPage.java | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/test/java/school/redrover/component/project/status_page/sidebar/BaseSidebarComponent.java b/src/test/java/school/redrover/component/project/status_page/sidebar/BaseSidebarComponent.java index cf6bb4df6..d64745331 100644 --- a/src/test/java/school/redrover/component/project/status_page/sidebar/BaseSidebarComponent.java +++ b/src/test/java/school/redrover/component/project/status_page/sidebar/BaseSidebarComponent.java @@ -72,7 +72,7 @@ public ProjectMovePage clickSidebarMove() { public ProjectRenamingPage clickSidebarRename() { renameMenuItem.click(); - return new ProjectRenamingPage<>(getDriver(), projectStatusPageFactory); + return new ProjectRenamingPage<>(getDriver(), projectStatusPageFactory).waitUntilPageLoadJS(); } diff --git a/src/test/java/school/redrover/page/ProjectRenamingPage.java b/src/test/java/school/redrover/page/ProjectRenamingPage.java index 6ad4d041a..fdfbf4327 100644 --- a/src/test/java/school/redrover/page/ProjectRenamingPage.java +++ b/src/test/java/school/redrover/page/ProjectRenamingPage.java @@ -7,9 +7,9 @@ import java.util.function.Function; -public class ProjectRenamingPage> extends BasePage> { - private final Function projectStatusPageFactory; +public class ProjectRenamingPage> + extends BasePage> { @FindBy(name = "newName") private WebElement newNameField; @@ -17,29 +17,32 @@ public class ProjectRenamingPage> extends BasePage projectStatusPageFactory) { + private final Function projectStatusPageFactory; + + + public ProjectRenamingPage(WebDriver driver, Function projectStatusPageFactory) { super(driver); this.projectStatusPageFactory = projectStatusPageFactory; } @Override - public ProjectRenamingPage getPage() { + public ProjectRenamingPage getPage() { return this; } - public ProjectRenamingPage sendNewName(String newName) { + public ProjectRenamingPage sendNewName(String newName) { newNameField.sendKeys(newName); return this; } - public ProjectRenamingPage clearName() { + public ProjectRenamingPage clearName() { newNameField.clear(); return this; } - public T clickRenameButton() { + public ProjectStatusPage clickRenameButton() { renameButton.click(); return projectStatusPageFactory.apply(getDriver()).waitUntilPageLoadJS();