From 0053dd23b6e702f403fe55a9c8b55e3f4104c1ce Mon Sep 17 00:00:00 2001 From: anttil <anttil> Date: Fri, 21 Sep 2012 08:47:33 +0000 Subject: [PATCH] SWE-2 / SP-263: Better way to wait for grid refreshs, code cleanup at widget package SVN: 26711 --- .../matcher/BrowserListsElementMatcher.java | 4 +- .../uitest/infra/webdriver/Action.java | 25 ++++++++++ .../uitest/infra/webdriver/Refreshing.java | 2 +- .../infra/webdriver/WaitForRefreshOf.java | 17 ++++++- .../page/tab/AssignSamplePropertyType.java | 23 +-------- .../page/tab/ExperimentTypeBrowser.java | 6 +-- .../uitest/page/tab/ProjectBrowser.java | 4 +- .../tab/PropertyTypeAssignmentBrowser.java | 4 +- .../uitest/page/tab/PropertyTypeBrowser.java | 4 +- .../uitest/page/tab/RegisterSample.java | 28 ++--------- .../uitest/page/tab/SampleBrowser.java | 4 +- .../uitest/page/tab/SampleTypeBrowser.java | 4 +- .../openbis/uitest/page/tab/SpaceBrowser.java | 6 +-- .../uitest/page/tab/VocabularyBrowser.java | 4 +- .../uitest/type/PropertyTypeDataType.java | 47 ++++++++++++++----- .../openbis/uitest/type/Representable.java | 28 +++++++++++ .../uitest/widget/AlertMessageBox.java | 3 +- .../cisd/openbis/uitest/widget/Button.java | 2 +- .../cisd/openbis/uitest/widget/Checkbox.java | 2 +- .../widget/DeletionConfirmationBox.java | 18 +++---- .../cisd/openbis/uitest/widget/DropDown.java | 2 +- .../openbis/uitest/widget/FilterToolBar.java | 22 ++++++--- .../cisd/openbis/uitest/widget/Form.java | 12 ++--- .../cisd/openbis/uitest/widget/Grid.java | 36 +++++--------- .../openbis/uitest/widget/PagingToolBar.java | 5 +- .../cisd/openbis/uitest/widget/Text.java | 2 +- .../cisd/openbis/uitest/widget/TextArea.java | 19 ++++++-- .../cisd/openbis/uitest/widget/Widget.java | 8 +++- 28 files changed, 192 insertions(+), 149 deletions(-) create mode 100644 ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/Action.java create mode 100644 ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/Representable.java diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/matcher/BrowserListsElementMatcher.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/matcher/BrowserListsElementMatcher.java index 1e4f848854f..cc6bb662fdd 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/matcher/BrowserListsElementMatcher.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/matcher/BrowserListsElementMatcher.java @@ -26,8 +26,8 @@ import ch.systemsx.cisd.openbis.uitest.infra.Row; /** * @author anttil */ -public class BrowserListsElementMatcher<T extends Browsable, U extends Browser<T>> extends - TypeSafeMatcher<U> +public class BrowserListsElementMatcher<T extends Browsable, U extends Browser<T>> + extends TypeSafeMatcher<U> { private T expected; diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/Action.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/Action.java new file mode 100644 index 00000000000..4799dab1a25 --- /dev/null +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/Action.java @@ -0,0 +1,25 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.uitest.infra.webdriver; + +/** + * @author anttil + */ +public interface Action +{ + public void execute(); +} diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/Refreshing.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/Refreshing.java index 369103f9652..7876b72cdaa 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/Refreshing.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/Refreshing.java @@ -21,5 +21,5 @@ package ch.systemsx.cisd.openbis.uitest.infra.webdriver; */ public interface Refreshing { - public boolean hasRefreshed(); + public String getState(); } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WaitForRefreshOf.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WaitForRefreshOf.java index 5ebe8131da4..0ca19955545 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WaitForRefreshOf.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WaitForRefreshOf.java @@ -28,21 +28,34 @@ import com.google.common.base.Predicate; public class WaitForRefreshOf extends FluentWait<Refreshing> { + private final String state; + + private Action action; + public WaitForRefreshOf(Refreshing widget) { super(widget); + this.state = widget.getState(); + } + + @SuppressWarnings("hiding") + public WaitForRefreshOf after(Action action) + { + this.action = action; + return this; } public void withTimeoutOf(int seconds) { - this.withTimeout(seconds, TimeUnit.SECONDS) + action.execute(); + withTimeout(seconds, TimeUnit.SECONDS) .pollingEvery(100, TimeUnit.MILLISECONDS) .until(new Predicate<Refreshing>() { @Override public boolean apply(Refreshing widget) { - return widget.hasRefreshed(); + return !state.equals(widget.getState()); } }); } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/AssignSamplePropertyType.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/AssignSamplePropertyType.java index 4daf95aff29..97acb322e51 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/AssignSamplePropertyType.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/AssignSamplePropertyType.java @@ -19,11 +19,10 @@ package ch.systemsx.cisd.openbis.uitest.page.tab; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Lazy; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; import ch.systemsx.cisd.openbis.uitest.type.PropertyTypeAssignment; -import ch.systemsx.cisd.openbis.uitest.type.PropertyTypeDataType; import ch.systemsx.cisd.openbis.uitest.widget.Button; import ch.systemsx.cisd.openbis.uitest.widget.Checkbox; import ch.systemsx.cisd.openbis.uitest.widget.DropDown; -import ch.systemsx.cisd.openbis.uitest.widget.Text; +import ch.systemsx.cisd.openbis.uitest.widget.Fillable; import ch.systemsx.cisd.openbis.uitest.widget.Widget; public class AssignSamplePropertyType @@ -53,25 +52,7 @@ public class AssignSamplePropertyType if (assignment.getInitialValue() != null && assignment.getInitialValue().length() > 0) { - PropertyTypeDataType type = assignment.getPropertyType().getDataType(); - - if (type.equals(PropertyTypeDataType.BOOLEAN)) - { - initialValue.handleAs(Checkbox.class).set( - assignment.getInitialValue().equals("true")); - } else if (type.equals(PropertyTypeDataType.VARCHAR)) - { - initialValue.handleAs(Text.class).write(assignment.getInitialValue()); - } else if (type.equals(PropertyTypeDataType.INTEGER)) - { - initialValue.handleAs(Text.class).write(assignment.getInitialValue()); - } else if (type.equals(PropertyTypeDataType.CONTROLLED_VOCABULARY)) - { - initialValue.handleAs(DropDown.class).select(assignment.getInitialValue()); - } else - { - throw new IllegalArgumentException("Type " + type + " not supported"); - } + ((Fillable) initialValue).fillWith(assignment.getInitialValue()); } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentTypeBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentTypeBrowser.java index a9fa491a79e..10706daf4af 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentTypeBrowser.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentTypeBrowser.java @@ -21,7 +21,6 @@ import ch.systemsx.cisd.openbis.uitest.infra.Cell; import ch.systemsx.cisd.openbis.uitest.infra.Row; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Lazy; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; -import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WaitForRefreshOf; import ch.systemsx.cisd.openbis.uitest.type.ExperimentType; import ch.systemsx.cisd.openbis.uitest.widget.Button; import ch.systemsx.cisd.openbis.uitest.widget.FilterToolBar; @@ -70,11 +69,10 @@ public class ExperimentTypeBrowser implements Browser<ExperimentType> } @Override - public void filter(ExperimentType type) + public void filter(final ExperimentType type) { paging.filters(); - filters.setCode(type.getCode()); - new WaitForRefreshOf(grid).withTimeoutOf(10); + filters.setCode(type.getCode(), grid); } @Override diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ProjectBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ProjectBrowser.java index b64deb40ac1..35640b15f50 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ProjectBrowser.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ProjectBrowser.java @@ -21,7 +21,6 @@ import ch.systemsx.cisd.openbis.uitest.infra.Cell; import ch.systemsx.cisd.openbis.uitest.infra.Row; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Lazy; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; -import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WaitForRefreshOf; import ch.systemsx.cisd.openbis.uitest.type.Project; import ch.systemsx.cisd.openbis.uitest.widget.Button; import ch.systemsx.cisd.openbis.uitest.widget.FilterToolBar; @@ -61,8 +60,7 @@ public class ProjectBrowser implements Browser<Project> public void filter(Project project) { paging.filters(); - filters.setCode(project.getCode()); - new WaitForRefreshOf(grid).withTimeoutOf(10); + filters.setCode(project.getCode(), grid); } @Override diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/PropertyTypeAssignmentBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/PropertyTypeAssignmentBrowser.java index aea639ab129..109c00ba938 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/PropertyTypeAssignmentBrowser.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/PropertyTypeAssignmentBrowser.java @@ -21,7 +21,6 @@ import ch.systemsx.cisd.openbis.uitest.infra.Cell; import ch.systemsx.cisd.openbis.uitest.infra.Row; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Lazy; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; -import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WaitForRefreshOf; import ch.systemsx.cisd.openbis.uitest.type.PropertyTypeAssignment; import ch.systemsx.cisd.openbis.uitest.widget.Button; import ch.systemsx.cisd.openbis.uitest.widget.FilterToolBar; @@ -64,8 +63,7 @@ public class PropertyTypeAssignmentBrowser implements Browser<PropertyTypeAssign public void filter(PropertyTypeAssignment assignment) { paging.filters(); - filters.setCode(assignment.getPropertyType().getCode()); - new WaitForRefreshOf(grid).withTimeoutOf(10); + filters.setCode(assignment.getPropertyType().getCode(), grid); } @Override diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/PropertyTypeBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/PropertyTypeBrowser.java index d9138986c35..26f48af9b2b 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/PropertyTypeBrowser.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/PropertyTypeBrowser.java @@ -21,7 +21,6 @@ import ch.systemsx.cisd.openbis.uitest.infra.Cell; import ch.systemsx.cisd.openbis.uitest.infra.Row; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Lazy; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; -import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WaitForRefreshOf; import ch.systemsx.cisd.openbis.uitest.type.PropertyType; import ch.systemsx.cisd.openbis.uitest.widget.Button; import ch.systemsx.cisd.openbis.uitest.widget.FilterToolBar; @@ -65,8 +64,7 @@ public class PropertyTypeBrowser implements Browser<PropertyType> public void filter(PropertyType propertyType) { paging.filters(); - filters.setCode(propertyType.getCode()); - new WaitForRefreshOf(grid).withTimeoutOf(10); + filters.setCode(propertyType.getCode(), grid); } @Override diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/RegisterSample.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/RegisterSample.java index be678aa3e05..fae6edc5692 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/RegisterSample.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/RegisterSample.java @@ -23,15 +23,13 @@ import java.util.Map; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Lazy; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; import ch.systemsx.cisd.openbis.uitest.type.PropertyType; -import ch.systemsx.cisd.openbis.uitest.type.PropertyTypeDataType; import ch.systemsx.cisd.openbis.uitest.type.Sample; import ch.systemsx.cisd.openbis.uitest.type.SampleType; import ch.systemsx.cisd.openbis.uitest.widget.Button; -import ch.systemsx.cisd.openbis.uitest.widget.Checkbox; import ch.systemsx.cisd.openbis.uitest.widget.DropDown; +import ch.systemsx.cisd.openbis.uitest.widget.Fillable; import ch.systemsx.cisd.openbis.uitest.widget.Form; import ch.systemsx.cisd.openbis.uitest.widget.Text; -import ch.systemsx.cisd.openbis.uitest.widget.Widget; public class RegisterSample { @@ -69,27 +67,9 @@ public class RegisterSample for (PropertyType propertyType : properties.keySet()) { - Widget w = form.getWidget(propertyType.getLabel()); - PropertyTypeDataType type = propertyType.getDataType(); - String value = properties.get(propertyType).toString(); - - switch (type) - { - case BOOLEAN: - w.handleAs(Checkbox.class).fillWith(value); - break; - case VARCHAR: - w.handleAs(Text.class).fillWith(value); - break; - case INTEGER: - w.handleAs(Text.class).fillWith(value); - break; - case CONTROLLED_VOCABULARY: - w.handleAs(DropDown.class).fillWith(value); - break; - default: - throw new IllegalArgumentException(type + " not supported"); - } + Fillable widget = (Fillable) form.getWidget(propertyType); + widget.fillWith(properties.get(propertyType).toString()); + } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleBrowser.java index 6d1ff127180..946ee796480 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleBrowser.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleBrowser.java @@ -23,7 +23,6 @@ import ch.systemsx.cisd.openbis.uitest.infra.Cell; import ch.systemsx.cisd.openbis.uitest.infra.Row; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Lazy; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; -import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WaitForRefreshOf; import ch.systemsx.cisd.openbis.uitest.type.Sample; import ch.systemsx.cisd.openbis.uitest.type.SampleType; import ch.systemsx.cisd.openbis.uitest.widget.Button; @@ -90,8 +89,7 @@ public class SampleBrowser implements Browser<Sample> public void filter(Sample sample) { paging.filters(); - filters.setCode(sample.getCode()); - new WaitForRefreshOf(grid).withTimeoutOf(10); + filters.setCode(sample.getCode(), grid); } @Override diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java index 1f36c16e274..36180029c24 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java @@ -21,7 +21,6 @@ import ch.systemsx.cisd.openbis.uitest.infra.Cell; import ch.systemsx.cisd.openbis.uitest.infra.Row; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Lazy; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; -import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WaitForRefreshOf; import ch.systemsx.cisd.openbis.uitest.type.SampleType; import ch.systemsx.cisd.openbis.uitest.widget.Button; import ch.systemsx.cisd.openbis.uitest.widget.FilterToolBar; @@ -77,8 +76,7 @@ public class SampleTypeBrowser implements Browser<SampleType> public void filter(SampleType type) { paging.filters(); - filters.setCode(type.getCode()); - new WaitForRefreshOf(grid).withTimeoutOf(10); + filters.setCode(type.getCode(), grid); } @Override diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SpaceBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SpaceBrowser.java index 2040e2cab28..190b7aa55cc 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SpaceBrowser.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SpaceBrowser.java @@ -21,7 +21,6 @@ import ch.systemsx.cisd.openbis.uitest.infra.Cell; import ch.systemsx.cisd.openbis.uitest.infra.Row; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Lazy; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; -import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WaitForRefreshOf; import ch.systemsx.cisd.openbis.uitest.type.Space; import ch.systemsx.cisd.openbis.uitest.widget.Button; import ch.systemsx.cisd.openbis.uitest.widget.DeletionConfirmationBox; @@ -76,11 +75,10 @@ public class SpaceBrowser implements Browser<Space> } @Override - public void filter(Space space) + public void filter(final Space space) { paging.filters(); - filters.setCode(space.getCode()); - new WaitForRefreshOf(grid).withTimeoutOf(10); + filters.setCode(space.getCode(), grid); } @Override diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/VocabularyBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/VocabularyBrowser.java index 98997c80516..a62a11d95c5 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/VocabularyBrowser.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/VocabularyBrowser.java @@ -21,7 +21,6 @@ import ch.systemsx.cisd.openbis.uitest.infra.Cell; import ch.systemsx.cisd.openbis.uitest.infra.Row; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Lazy; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; -import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WaitForRefreshOf; import ch.systemsx.cisd.openbis.uitest.type.Vocabulary; import ch.systemsx.cisd.openbis.uitest.widget.Button; import ch.systemsx.cisd.openbis.uitest.widget.FilterToolBar; @@ -68,8 +67,7 @@ public class VocabularyBrowser implements Browser<Vocabulary> public void filter(Vocabulary vocabulary) { paging.filters(); - filters.setCode(vocabulary.getCode()); - new WaitForRefreshOf(grid).withTimeoutOf(10); + filters.setCode(vocabulary.getCode(), grid); } @Override diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/PropertyTypeDataType.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/PropertyTypeDataType.java index 2f61aeb1042..0af09b6c2bf 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/PropertyTypeDataType.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/PropertyTypeDataType.java @@ -16,31 +16,54 @@ package ch.systemsx.cisd.openbis.uitest.type; +import ch.systemsx.cisd.openbis.uitest.widget.Checkbox; +import ch.systemsx.cisd.openbis.uitest.widget.DropDown; +import ch.systemsx.cisd.openbis.uitest.widget.Text; +import ch.systemsx.cisd.openbis.uitest.widget.TextArea; +import ch.systemsx.cisd.openbis.uitest.widget.Widget; + /** * @author anttil */ -public enum PropertyTypeDataType +public enum PropertyTypeDataType { - BOOLEAN("BOOLEAN"), - HYPERLINK("HYPERLINK"), - INTEGER("INTEGER"), - MATERIAL("MATERIAL"), - MULTILINE_VARCHAR("MULTILINE_VARCHAR"), - REAL("REAL"), - TIMESTAMP("TIMESTAMP"), - VARCHAR("VARCHAR"), - XML("XML"), - CONTROLLED_VOCABULARY("CONTROLLEDVOCABULARY"); + BOOLEAN("BOOLEAN", Checkbox.class), + HYPERLINK("HYPERLINK", Text.class), + INTEGER("INTEGER", Text.class), + MATERIAL("MATERIAL", Text.class), + MULTILINE_VARCHAR("MULTILINE_VARCHAR", TextArea.class), + REAL("REAL", Text.class), + TIMESTAMP("TIMESTAMP", Text.class), + VARCHAR("VARCHAR", Text.class), + XML("XML", TextArea.class), + CONTROLLED_VOCABULARY("CONTROLLEDVOCABULARY", DropDown.class); private String name; - private PropertyTypeDataType(String name) + private Class<? extends Widget> widgetClass; + + private PropertyTypeDataType(String name, Class<? extends Widget> widgetClass) { this.name = name; + this.widgetClass = widgetClass; } public String getName() { return this.name; } + + public Widget representedAs() + { + try + { + return widgetClass.newInstance(); + } catch (InstantiationException ex) + { + throw new RuntimeException(ex); + } catch (IllegalAccessException ex) + { + throw new RuntimeException(ex); + } + } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/Representable.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/Representable.java new file mode 100644 index 00000000000..2ccf348d20a --- /dev/null +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/Representable.java @@ -0,0 +1,28 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.uitest.type; + +import ch.systemsx.cisd.openbis.uitest.widget.Fillable; +import ch.systemsx.cisd.openbis.uitest.widget.Widget; + +/** + * @author anttil + */ +public interface Representable<T extends Widget & Fillable> +{ + public T representedAs(); +} diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/AlertMessageBox.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/AlertMessageBox.java index a16ba6cc6d4..98f971d490d 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/AlertMessageBox.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/AlertMessageBox.java @@ -16,7 +16,6 @@ package ch.systemsx.cisd.openbis.uitest.widget; -import org.openqa.selenium.WebElement; /** * @author anttil @@ -25,7 +24,7 @@ public class AlertMessageBox extends Widget { public void dismiss() { - WebElement ok = find(".//button[text()=\"OK\"]"); + Button ok = find(".//button[text()=\"OK\"]").handleAs(Button.class); ok.click(); } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Button.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Button.java index cfdb31783be..32e776acd77 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Button.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Button.java @@ -36,7 +36,7 @@ public class Button extends Widget button = context; } else { - button = find(".//button"); + button = find(".//button").getContext(); } return "true".equalsIgnoreCase(button.getAttribute("aria-pressed")); } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Checkbox.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Checkbox.java index 6afa0d7fb58..e2c25b8b05d 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Checkbox.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Checkbox.java @@ -25,7 +25,7 @@ public class Checkbox extends Widget implements Fillable { public void set(boolean value) { - WebElement input = find("input"); + WebElement input = find("input").getContext(); if (input.getAttribute("checked") != null ^ value) { input.click(); diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/DeletionConfirmationBox.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/DeletionConfirmationBox.java index ba600da29f5..043a9a48daa 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/DeletionConfirmationBox.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/DeletionConfirmationBox.java @@ -16,8 +16,6 @@ package ch.systemsx.cisd.openbis.uitest.widget; -import org.openqa.selenium.WebElement; - /** * @author anttil */ @@ -25,17 +23,19 @@ public class DeletionConfirmationBox extends Widget { public void confirm(String reason) { + TextArea text = find(".//textarea").handleAs(TextArea.class); + text.write(reason); - WebElement text = find(".//textarea"); - text.sendKeys(reason); - - WebElement ok = find(".//button[text()=\"OK\"]"); - ok.click(); + getOkButton().click(); } public void confirm() { - WebElement ok = find(".//button[text()=\"OK\"]"); - ok.click(); + getOkButton().click(); + } + + private Button getOkButton() + { + return find(".//button[text()=\"OK\"]").handleAs(Button.class); } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/DropDown.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/DropDown.java index 3df548affcb..8bed7177f26 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/DropDown.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/DropDown.java @@ -60,7 +60,7 @@ public class DropDown extends Widget implements Fillable private List<WebElement> getChoiceElements() { - WebElement opener = find(".//img"); + WebElement opener = find(".//img").getContext(); opener.click(); return SeleniumTest.driver.findElements(By.className("x-combo-list-item")); } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/FilterToolBar.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/FilterToolBar.java index 2c1611ba0a8..799de235113 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/FilterToolBar.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/FilterToolBar.java @@ -16,23 +16,33 @@ package ch.systemsx.cisd.openbis.uitest.widget; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Action; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WaitForRefreshOf; + /** * @author anttil */ public class FilterToolBar extends Widget { - public void setCode(String text) + public void setCode(final String text, Grid refreshingGrid) { - Text t = new Text(); - t.setContext(find(".//input[contains(@id, 'Code-input')]")); - t.write(text); + final Text t = find(".//input[contains(@id, 'Code-input')]").handleAs(Text.class); + + new WaitForRefreshOf(refreshingGrid).after(new Action() + { + @Override + public void execute() + { + t.write(text); + } + }).withTimeoutOf(10); + } public void reset() { - Button b = new Button(); - b.setContext(find(".//button[text()='Reset']")); + Button b = find(".//button[text()='Reset']").handleAs(Button.class); b.click(); } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Form.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Form.java index da9bd363b07..a555229a209 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Form.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Form.java @@ -22,27 +22,27 @@ import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; +import ch.systemsx.cisd.openbis.uitest.type.PropertyType; + /** * @author anttil */ public class Form extends Widget { - public Widget getWidget(String label) + public Widget getWidget(PropertyType type) { List<WebElement> elements = findAll(".//form/div/label"); for (WebElement element : elements) { - if (element.getText().toLowerCase().startsWith(label.toLowerCase())) + if (element.getText().toLowerCase().startsWith(type.getLabel().toLowerCase())) { - Widget w = new Widget() - { - }; + Widget w = type.getDataType().representedAs(); w.setContext(element.findElement(By.xpath("../div/div"))); return w; } } - throw new IllegalArgumentException("Could not find " + label); + throw new IllegalArgumentException("Could not find " + type.getLabel()); } public List<String> getLabels() diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Grid.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Grid.java index 5209e75cbd4..3b5ea166c69 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Grid.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Grid.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.uitest.widget; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; @@ -26,6 +27,7 @@ import org.openqa.selenium.WebElement; import ch.systemsx.cisd.openbis.uitest.infra.Cell; import ch.systemsx.cisd.openbis.uitest.infra.Row; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Refreshing; +import ch.systemsx.cisd.openbis.uitest.suite.SeleniumTest; /** * @author anttil @@ -93,7 +95,15 @@ public class Grid extends Widget implements Refreshing private List<WebElement> getCells() { - return findAll(".//td[not(ancestor::div[contains(@style,'display:none')]) and contains(@class, 'x-grid') and contains(@class, '-col ')]//*[not(*)]"); + SeleniumTest.driver.manage().timeouts().implicitlyWait(500, TimeUnit.MILLISECONDS); + try + { + return findAll(".//td[not(ancestor::div[contains(@style,'display:none')]) and contains(@class, 'x-grid') and contains(@class, '-col ')]//*[not(*)]"); + } finally + { + SeleniumTest.driver.manage().timeouts().implicitlyWait(SeleniumTest.IMPLICIT_WAIT, + TimeUnit.SECONDS); + } } @Override @@ -120,29 +130,9 @@ public class Grid extends Widget implements Refreshing return s; } - boolean itsOn = false; - - int last = 0; - @Override - public synchronized boolean hasRefreshed() + public synchronized String getState() { - if (itsOn) - { - if (this.last != getCells().size()) - { - this.itsOn = false; - return true; - } else - { - return false; - } - } else - { - itsOn = true; - this.last = getCells().size(); - return false; - } - + return "" + this.getCells().size(); } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/PagingToolBar.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/PagingToolBar.java index 58ad8aa7591..c5f76713719 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/PagingToolBar.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/PagingToolBar.java @@ -16,7 +16,6 @@ package ch.systemsx.cisd.openbis.uitest.widget; -import org.openqa.selenium.WebElement; /** * @author anttil @@ -26,9 +25,7 @@ public class PagingToolBar extends Widget public void filters() { - WebElement button = find(".//button[text()='Filters']"); - Button b = new Button(); - b.setContext(button); + Button b = find(".//button[text()='Filters']").handleAs(Button.class); if (!b.isPressed()) { b.click(); diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Text.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Text.java index 7656326fae6..c27cbd56a6f 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Text.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Text.java @@ -47,7 +47,7 @@ public class Text extends Widget implements Fillable return context; } else { - return find("input"); + return find("input").getContext(); } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/TextArea.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/TextArea.java index 1e1b84394a5..e4cc7a41e11 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/TextArea.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/TextArea.java @@ -25,21 +25,19 @@ public class TextArea extends Widget implements Fillable { public void write(String text) { - WebElement element = find(".//textarea"); + WebElement element = getElement(); element.clear(); element.sendKeys(text); } public void clear() { - WebElement element = find(".//textarea"); - element.clear(); + getElement().clear(); } public void append(String text) { - WebElement element = find(".//textarea"); - element.sendKeys(text); + getElement().sendKeys(text); } @Override @@ -47,4 +45,15 @@ public class TextArea extends Widget implements Fillable { write(string); } + + private WebElement getElement() + { + if (context.getTagName().equals("textarea")) + { + return context; + } else + { + return find(".//textarea").getContext(); + } + } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Widget.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Widget.java index 5e0992453a1..8abaeaa3f21 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Widget.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Widget.java @@ -38,9 +38,13 @@ public abstract class Widget return context; } - protected WebElement find(String xpath) + protected Widget find(String xpath) { - return context.findElement(By.xpath(xpath)); + Widget w = new Widget() + { + }; + w.setContext(context.findElement(By.xpath(xpath))); + return w; } protected List<WebElement> findAll(String xpath) -- GitLab