11package org .labkey .test .pages .core .admin ;
22
3+ import org .labkey .test .BootstrapLocators ;
34import org .labkey .test .Locator ;
45import org .labkey .test .Locators ;
56import org .labkey .test .WebDriverWrapper ;
67import org .labkey .test .WebTestHelper ;
78import org .labkey .test .components .html .Input ;
89import org .labkey .test .pages .LabKeyPage ;
910import org .labkey .test .util .PortalHelper ;
11+ import org .openqa .selenium .NoSuchElementException ;
12+ import org .openqa .selenium .StaleElementReferenceException ;
13+ import org .openqa .selenium .TimeoutException ;
1014import org .openqa .selenium .WebDriver ;
1115import org .openqa .selenium .WebElement ;
16+ import org .openqa .selenium .support .ui .ExpectedConditions ;
17+
18+ import java .util .List ;
19+ import java .util .stream .Collectors ;
1220
1321public class AllowedFileExtensionAdminPage extends LabKeyPage <AllowedFileExtensionAdminPage .ElementCache >
1422{
@@ -23,6 +31,23 @@ public static AllowedFileExtensionAdminPage beginAt(WebDriverWrapper webDriverWr
2331 return new AllowedFileExtensionAdminPage (webDriverWrapper .getDriver ());
2432 }
2533
34+ @ Override
35+ protected void waitForPage ()
36+ {
37+ waitFor (()-> {
38+ try
39+ {
40+ return !BootstrapLocators .loadingSpinner .areAnyVisible (getDriver ()) &&
41+ elementCache ().extension .getComponentElement ().isDisplayed ();
42+ }
43+ catch (NoSuchElementException | StaleElementReferenceException | TimeoutException retry )
44+ {
45+ return false ;
46+ }
47+ }, "Allowed File Extensions page did not load in time." , 3_000 );
48+
49+ }
50+
2651 public AllowedFileExtensionAdminPage setExtension (String extension )
2752 {
2853 elementCache ().extension .set (extension );
@@ -31,9 +56,11 @@ public AllowedFileExtensionAdminPage setExtension(String extension)
3156
3257 public String clickSaveExpectingError ()
3358 {
59+ String errorText ;
3460 elementCache ().saveExtension .click ();
61+ errorText = waitForElement (Locators .labkeyError ).getText ();
3562 clearCache ();
36- return waitForElement ( Locators . labkeyError ). getText () ;
63+ return errorText ;
3764 }
3865
3966 public AllowedFileExtensionAdminPage clickSaveExtension ()
@@ -45,30 +72,90 @@ public AllowedFileExtensionAdminPage clickSaveExtension()
4572
4673 public AllowedFileExtensionAdminPage updateExtension (String oldExtension , String newExtension )
4774 {
48- elementCache (). allowedExtension (oldExtension ).set (newExtension );
75+ getAllowedExtension ( getAllowedExtensionIndex (oldExtension ) ).set (newExtension );
4976 clearCache ();
5077 return this ;
5178 }
5279
53- public AllowedFileExtensionAdminPage deleteExtension ( int index )
80+ public AllowedFileExtensionAdminPage clickSaveUpdateExtension ( )
5481 {
55- elementCache ().deleteExtension (index );
82+ elementCache ().saveUpdateExtension .click ();
83+ sleep (750 );
5684 clearCache ();
5785 return this ;
5886 }
5987
60- public AllowedFileExtensionAdminPage clickUpdateExtension ()
88+ public String clickUpdateExtensionExpectingError ()
6189 {
62- elementCache ().updateExtension .click ();
90+ elementCache ().saveUpdateExtension .click ();
91+ clearCache ();
92+ return waitForElement (Locators .labkeyError ).getText ();
93+ }
94+
95+ public AllowedFileExtensionAdminPage deleteExtension (int index )
96+ {
97+ WebElement deleteButton = elementCache ().deleteExtensions .get (index );
98+ deleteButton .click ();
99+
100+ shortWait ().withMessage ("Existing extenstion was not deleted." )
101+ .until (ExpectedConditions .stalenessOf (deleteButton ));
102+
63103 clearCache ();
64104 return this ;
65105 }
66106
67- public String clickUpdateExtensionExpectingError ()
107+ public AllowedFileExtensionAdminPage deleteExtension (String extension )
108+ {
109+ return deleteExtension (getAllowedExtensionIndex (extension ));
110+ }
111+
112+ public AllowedFileExtensionAdminPage deleteAllExtensions (boolean acceptAlert )
68113 {
69- elementCache ().updateExtension .click ();
114+ elementCache ().deleteAll .click ();
115+
116+ if (acceptAlert )
117+ {
118+ acceptAlert ();
119+ shortWait ().withMessage ("'Delete All' button should have gone away." )
120+ .until (ExpectedConditions .stalenessOf (elementCache ().deleteAll ));
121+ }
122+ else
123+ {
124+ cancelAlert ();
125+ }
126+
70127 clearCache ();
71- return waitForElement (Locators .labkeyError ).getText ();
128+ return this ;
129+ }
130+
131+ public List <Input > getAllowedExtensions ()
132+ {
133+ List <WebElement > collection = Locator .inputByIdContaining ("existingValue" )
134+ .findElements (elementCache ().existingPanel );
135+
136+ return collection .stream ().map (el -> new Input (el , getDriver ())).collect (Collectors .toList ());
137+
138+ }
139+
140+ public Input getAllowedExtension (int index )
141+ {
142+ return getAllowedExtensions ().get (index );
143+ }
144+
145+ public Integer getAllowedExtensionIndex (String extension )
146+ {
147+ int index = 0 ;
148+ List <Input > allowedExtensions = getAllowedExtensions ();
149+
150+ for (Input element : allowedExtensions )
151+ {
152+ if (element .getValue ().equalsIgnoreCase (extension ))
153+ return index ;
154+
155+ index ++;
156+ }
157+
158+ return -1 ;
72159 }
73160
74161 @ Override
@@ -79,24 +166,24 @@ protected ElementCache newElementCache()
79166
80167 protected class ElementCache extends LabKeyPage <ElementCache >.ElementCache
81168 {
82- final WebElement registerNewAllowedFileExtension = PortalHelper .Locators .webPart ("Register New Allowed File Extension" )
83- .findWhenNeeded (this );
84- final Input extension = new Input (Locator .name ("newValue" ).findWhenNeeded (registerNewAllowedFileExtension ), getDriver ());
85- final WebElement saveExtension = Locator .lkButton ("Save" ).findWhenNeeded (registerNewAllowedFileExtension );
169+ final WebElement registerNewPanel = PortalHelper .Locators .webPart ("Register New Allowed File Extension" ).findWhenNeeded (this );
170+ final WebElement existingPanel = PortalHelper .Locators .webPart ("Existing Allowed File Extensions" ).findWhenNeeded (this );
86171
87- final WebElement existingAllowedFileExtensions = PortalHelper .Locators .webPart ("Existing Allowed File Extensions" )
88- .findWhenNeeded (this );
89- final WebElement updateExtension = Locator .lkButton ("Save" ).findWhenNeeded (existingAllowedFileExtensions );
172+ final Input extension = new Input (Locator .id ("newValueTextField" ).findWhenNeeded (registerNewPanel ), getDriver ());
173+ final WebElement saveExtension = Locator .lkButton ("Save" ).findWhenNeeded (registerNewPanel );
90174
91- final Input allowedExtension (String value )
92- {
93- return new Input (Locator .inputByIdContaining ("existingValue" ).withAttribute ("value" , value )
94- .findWhenNeeded (existingAllowedFileExtensions ), getDriver ());
95- }
175+ final WebElement saveUpdateExtension = Locator .lkButton ("Save" ).findWhenNeeded (existingPanel );
96176
97- final WebElement deleteExtension ( int index )
177+ List < Input > allowedExtensions ( )
98178 {
99- return Locator .linkWithText ("Delete" ).index (index ).findWhenNeeded (existingAllowedFileExtensions );
179+ return Locator .inputByIdContaining ("existingValue" )
180+ .findElements (elementCache ().existingPanel )
181+ .stream ().map (el -> new Input (el , getDriver ())).collect (Collectors .toList ());
100182 }
183+
184+ final List <WebElement > deleteExtensions = Locator .linkWithText ("Delete" ).findElements (existingPanel );
185+
186+ final WebElement deleteAll = Locator .linkWithText ("Delete All" ).findWhenNeeded (existingPanel );
187+
101188 }
102189}
0 commit comments