44import org .labkey .test .BootstrapLocators ;
55import org .labkey .test .Locator ;
66import org .labkey .test .WebDriverWrapper ;
7- import org .labkey .test .components .Component ;
8- import org .labkey .test .components .WebDriverComponent ;
7+ import org .labkey .test .components .bootstrap .Panel ;
98import org .labkey .test .components .react .BaseReactSelect ;
109import org .labkey .test .components .react .FilteringReactSelect ;
1110import org .labkey .test .components .react .ReactSelect ;
1211import org .openqa .selenium .NoSuchElementException ;
1312import org .openqa .selenium .StaleElementReferenceException ;
1413import org .openqa .selenium .WebDriver ;
1514import org .openqa .selenium .WebElement ;
15+ import org .openqa .selenium .support .ui .ExpectedConditions ;
1616
1717import java .util .Arrays ;
18+ import java .util .HashSet ;
1819import java .util .List ;
20+ import java .util .Set ;
1921
2022/**
2123 * <p>
2527 * </p>
2628 * @see <a href="https://github.com/LabKey/labkey-ui-components/blob/master/packages/components/src/components/entities/ParentEntityEditPanel.tsx">ParentEntityEditPanel.tsx</a>
2729 */
28- public class ParentEntityEditPanel extends WebDriverComponent <ParentEntityEditPanel .ElementCache >
30+ public class ParentEntityEditPanel extends Panel <ParentEntityEditPanel .ElementCache >
2931{
30- private final WebDriver driver ;
31- private final WebElement editingDiv ;
32-
3332 /**
3433 * Constructor for the panel.
3534 *
@@ -38,20 +37,7 @@ public class ParentEntityEditPanel extends WebDriverComponent<ParentEntityEditPa
3837 */
3938 public ParentEntityEditPanel (WebElement element , WebDriver driver )
4039 {
41- this .driver = driver ;
42- editingDiv = element ;
43- }
44-
45- @ Override
46- public WebElement getComponentElement ()
47- {
48- return editingDiv ;
49- }
50-
51- @ Override
52- protected WebDriver getDriver ()
53- {
54- return driver ;
40+ super (element , driver );
5541 }
5642
5743 @ Override
@@ -184,6 +170,10 @@ public void clickSave(int waitTime)
184170 WebDriverWrapper .waitFor (()->elementCache ().saveButton .isEnabled (),
185171 "Save button is not enabled." , 2_500 );
186172
173+ String parentType = getTitle ().split (" " , 2 )[1 ].trim (); // Trim "Editing" from the title
174+ Set <String > selections = new HashSet <>();
175+ getAllParents ().stream ().map (BaseReactSelect ::getSelections ).forEach (selections ::addAll );
176+
187177 // The wait time is used here to validate the panel exits edit mode.
188178 clickButtonWaitForPanel (elementCache ().saveButton , waitTime );
189179
@@ -192,6 +182,20 @@ public void clickSave(int waitTime)
192182 WebDriverWrapper .waitFor (()->!progressbar .isDisplayed (),
193183 "It looks like an update took too long." , waitTime );
194184
185+ Panel <?> detailsPanel = new Panel .PanelFinder (getDriver ()).withTitle (parentType ).waitFor (getDriver ());
186+ if (!selections .isEmpty ())
187+ {
188+ for (String selection : selections )
189+ {
190+ getWrapper ().quickWait ().until (ExpectedConditions .visibilityOf (
191+ Locator .linkWithText (selection ).findWhenNeeded (detailsPanel )));
192+ }
193+ }
194+ else
195+ {
196+ getWrapper ().quickWait ().until (ExpectedConditions .visibilityOf (
197+ Locator .tag ("td" ).containing ("has been set for this sample." ).findWhenNeeded (detailsPanel )));
198+ }
195199 }
196200
197201 /**
@@ -467,28 +471,19 @@ public boolean hasParentInputError()
467471 /**
468472 * Simple finder for this panel.
469473 */
470- public static class ParentEntityEditPanelFinder extends WebDriverComponentFinder <ParentEntityEditPanel , ParentEntityEditPanelFinder >
474+ public static class ParentEntityEditPanelFinder extends AbstractPanelFinder <ParentEntityEditPanel , ParentEntityEditPanelFinder >
471475 {
472476 public ParentEntityEditPanelFinder (WebDriver driver )
473477 {
474478 super (driver );
479+ withTitle ("Editing" );
475480 }
476481
477482 @ Override
478483 protected ParentEntityEditPanel construct (WebElement element , WebDriver driver )
479484 {
480485 return new ParentEntityEditPanel (element , driver );
481486 }
482-
483- @ Override
484- protected Locator locator ()
485- {
486- return Locator
487- .tagContainingText ("div" , "Editing" )
488- .withClass ("panel-heading" )
489- .parent ()
490- .child (Locator .tagWithClass ("div" , "panel-body" ));
491- }
492487 }
493488
494489 public static class DataClassAddParentEntityPanelFinder extends WebDriverComponentFinder <ParentEntityEditPanel , DataClassAddParentEntityPanelFinder >
@@ -517,7 +512,7 @@ protected ElementCache newElementCache()
517512 return new ElementCache ();
518513 }
519514
520- protected class ElementCache extends Component <?>.ElementCache
515+ protected class ElementCache extends Panel <?>.ElementCache
521516 {
522517 final WebElement saveButton = Locator .byClass ("btn-success" ).withText ("Save" ).findWhenNeeded (this );
523518 final WebElement cancelButton = Locator .byClass ("btn-default" ).withText ("Cancel" ).refindWhenNeeded (this );
0 commit comments