From c18493edeb40a638b7b691de4bff7bededc2601a Mon Sep 17 00:00:00 2001 From: anttil <anttil> Date: Fri, 21 Sep 2012 13:30:43 +0000 Subject: [PATCH] SWE-2 / SP-263: Get rid of Widget superclass SVN: 26712 --- .../cisd/openbis/uitest/infra/Contextual.java | 28 +++++ .../uitest/{widget => infra}/Fillable.java | 2 +- .../infra/{webdriver => }/Refreshing.java | 2 +- .../cisd/openbis/uitest/infra/Widget.java | 26 +++++ .../uitest/infra/webdriver/PageProxy.java | 30 ++--- .../infra/webdriver/WaitForRefreshOf.java | 2 + .../infra/webdriver/WebElementProxy.java | 13 ++- .../infra/webdriver/WidgetWebElement.java | 105 ++++++++++++++++++ .../page/dialog/AddSampleTypeDialog.java | 3 +- .../page/dialog/EditSampleTypeDialog.java | 3 +- .../page/tab/AssignSamplePropertyType.java | 11 +- .../openbis/uitest/page/tab/LoginPage.java | 4 +- .../uitest/page/tab/RegisterSample.java | 2 +- .../openbis/uitest/suite/ExperimentTest.java | 4 +- .../suite/PropertyTypeAssignmentTest.java | 25 ++++- .../cisd/openbis/uitest/suite/SampleTest.java | 4 +- .../openbis/uitest/suite/SeleniumTest.java | 36 +++++- .../cisd/openbis/uitest/suite/SprintTest.java | 9 +- .../uitest/type/PropertyTypeDataType.java | 23 ++-- .../openbis/uitest/type/Representable.java | 4 +- .../uitest/widget/AlertMessageBox.java | 16 ++- .../cisd/openbis/uitest/widget/Button.java | 31 ++++-- .../cisd/openbis/uitest/widget/Checkbox.java | 27 ++++- .../widget/DeletionConfirmationBox.java | 18 ++- .../cisd/openbis/uitest/widget/DropDown.java | 22 +++- .../widget/{Widget.java => Dynamic.java} | 61 +++++----- .../openbis/uitest/widget/FilterToolBar.java | 16 ++- .../cisd/openbis/uitest/widget/Form.java | 39 ++++++- .../cisd/openbis/uitest/widget/Grid.java | 25 +++-- .../cisd/openbis/uitest/widget/Link.java | 24 +++- .../openbis/uitest/widget/PagingToolBar.java | 14 ++- .../openbis/uitest/widget/SubmitButton.java | 46 ++++++++ .../cisd/openbis/uitest/widget/Text.java | 39 ++++--- .../cisd/openbis/uitest/widget/TextArea.java | 34 +++--- .../cisd/openbis/uitest/widget/TreeGrid.java | 15 ++- 35 files changed, 591 insertions(+), 172 deletions(-) create mode 100644 ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Contextual.java rename ui-test/source/java/ch/systemsx/cisd/openbis/uitest/{widget => infra}/Fillable.java (93%) rename ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/{webdriver => }/Refreshing.java (92%) create mode 100644 ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Widget.java create mode 100644 ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WidgetWebElement.java rename ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/{Widget.java => Dynamic.java} (54%) create mode 100644 ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/SubmitButton.java diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Contextual.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Contextual.java new file mode 100644 index 00000000000..234588a5286 --- /dev/null +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Contextual.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.infra; + +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; + + +/** + * @author anttil + */ +public interface Contextual +{ + public void setContext(WidgetWebElement context); +} diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Fillable.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Fillable.java similarity index 93% rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Fillable.java rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Fillable.java index be2c5863796..7181c162c1f 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Fillable.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Fillable.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package ch.systemsx.cisd.openbis.uitest.widget; +package ch.systemsx.cisd.openbis.uitest.infra; /** * @author anttil 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/Refreshing.java similarity index 92% rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/Refreshing.java rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Refreshing.java index 7876b72cdaa..ed13891adca 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/Refreshing.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package ch.systemsx.cisd.openbis.uitest.infra.webdriver; +package ch.systemsx.cisd.openbis.uitest.infra; /** * @author anttil diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Widget.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Widget.java new file mode 100644 index 00000000000..6517bebcc87 --- /dev/null +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Widget.java @@ -0,0 +1,26 @@ +/* + * 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; + +/** + * @author anttil + */ +public interface Widget extends Contextual +{ + public String getTagName(); + +} diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/PageProxy.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/PageProxy.java index 087037f4c5e..ee1fb656514 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/PageProxy.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/PageProxy.java @@ -19,7 +19,6 @@ package ch.systemsx.cisd.openbis.uitest.infra.webdriver; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; import javassist.util.proxy.MethodHandler; import javassist.util.proxy.ProxyFactory; @@ -28,10 +27,11 @@ import org.openqa.selenium.By; import org.openqa.selenium.StaleElementReferenceException; import org.openqa.selenium.WebElement; +import ch.systemsx.cisd.openbis.uitest.infra.Contextual; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; import ch.systemsx.cisd.openbis.uitest.infra.screenshot.ScreenShotProxy; import ch.systemsx.cisd.openbis.uitest.infra.screenshot.ScreenShotter; import ch.systemsx.cisd.openbis.uitest.suite.SeleniumTest; -import ch.systemsx.cisd.openbis.uitest.widget.Widget; /** * @author anttil @@ -115,29 +115,31 @@ public class PageProxy try { field.setAccessible(true); - Class<?> type = field.getType(); + Contextual widget = (Contextual) field.getType().newInstance(); - Widget widget; - if (Modifier.isAbstract(type.getModifiers())) + String tagName = null; + if (widget instanceof Widget) { - widget = new Widget() - { - }; - } else - { - widget = (Widget) type.newInstance(); + tagName = ((Widget) widget).getTagName(); } WebElement element; if (field.getAnnotation(Lazy.class) != null) { - element = (WebElement) WebElementProxy.newInstance(locate.value()); + element = + (WebElement) WebElementProxy.newInstance(locate.value(), + tagName); } else { element = SeleniumTest.driver.findElement(By.id(locate.value())); + if (tagName != null && !element.getTagName().equals(tagName)) + { + element = element.findElement(By.xpath(".//" + tagName)); + } } - widget.setContext((WebElement) ScreenShotProxy - .newInstance(element, shotter)); + + widget.setContext(new WidgetWebElement((WebElement) ScreenShotProxy + .newInstance(element, shotter))); field.set(t, widget); } catch (IllegalArgumentException ex) { 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 0ca19955545..a2739d47241 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 @@ -22,6 +22,8 @@ import org.openqa.selenium.support.ui.FluentWait; import com.google.common.base.Predicate; +import ch.systemsx.cisd.openbis.uitest.infra.Refreshing; + /** * @author anttil */ diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WebElementProxy.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WebElementProxy.java index d0415744bc8..bf6472d69e3 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WebElementProxy.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WebElementProxy.java @@ -30,18 +30,21 @@ public class WebElementProxy implements InvocationHandler private String id; - public static Object newInstance(String id) + private String tag; + + public static Object newInstance(String id, String tag) { return java.lang.reflect.Proxy.newProxyInstance( WebElement.class.getClassLoader(), new Class<?>[] { WebElement.class }, - new WebElementProxy(id)); + new WebElementProxy(id, tag)); } - private WebElementProxy(String id) + private WebElementProxy(String id, String tag) { this.id = id; + this.tag = tag; } @Override @@ -50,6 +53,10 @@ public class WebElementProxy implements InvocationHandler try { WebElement e = SeleniumTest.driver.findElement(By.id(id)); + if (tag != null && !tag.equals(e.getTagName())) + { + e = e.findElement(By.xpath(".//" + tag)); + } return m.invoke(e, args); } catch (InvocationTargetException e) { diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WidgetWebElement.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WidgetWebElement.java new file mode 100644 index 00000000000..e98938c4efd --- /dev/null +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/webdriver/WidgetWebElement.java @@ -0,0 +1,105 @@ +/* + * 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; + +import java.util.List; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.interactions.Actions; + +import ch.systemsx.cisd.openbis.uitest.infra.Widget; +import ch.systemsx.cisd.openbis.uitest.suite.SeleniumTest; + +/** + * @author anttil + */ +public class WidgetWebElement +{ + + public WebElement element; + + public WidgetWebElement(WebElement element) + { + this.element = element; + } + + public void click() + { + element.click(); + } + + public String getAttribute(String key) + { + return element.getAttribute(key); + } + + public String getTagName() + { + return element.getTagName(); + } + + public void sendKeys(String keys) + { + element.sendKeys(keys); + } + + public void clear() + { + element.clear(); + } + + public WebElement find(String xpath) + { + return element.findElement(By.xpath(xpath)); + } + + public <T extends Widget> T find(String xpath, Class<T> widgetClass) + { + T t; + try + { + t = widgetClass.newInstance(); + } catch (InstantiationException ex) + { + throw new RuntimeException(ex); + } catch (IllegalAccessException ex) + { + throw new RuntimeException(ex); + } + + WebElement e = element.findElement(By.xpath(xpath)); + if (!e.getTagName().equals(t.getTagName())) + { + e = e.findElement(By.xpath(".//" + t.getTagName())); + } + t.setContext(new WidgetWebElement(e)); + return t; + } + + public List<WebElement> findAll(String xpath) + { + return element.findElements(By.xpath(xpath)); + } + + public void mouseOver() + { + Actions builder = new Actions(SeleniumTest.driver); + builder.moveToElement(element).build().perform(); + } + +} diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSampleTypeDialog.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSampleTypeDialog.java index bb09f51be8d..1d200775a0d 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSampleTypeDialog.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSampleTypeDialog.java @@ -21,6 +21,7 @@ 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.Text; +import ch.systemsx.cisd.openbis.uitest.widget.TextArea; @SuppressWarnings("unused") public class AddSampleTypeDialog @@ -30,7 +31,7 @@ public class AddSampleTypeDialog private Text code; @Locate("openbis_add-type-dialog-description-field") - private Text description; + private TextArea description; @Locate("openbis_add-type-dialog-listable") private Checkbox listable; diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/EditSampleTypeDialog.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/EditSampleTypeDialog.java index be1fc5449ca..16b59868988 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/EditSampleTypeDialog.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/EditSampleTypeDialog.java @@ -21,13 +21,14 @@ 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.Text; +import ch.systemsx.cisd.openbis.uitest.widget.TextArea; @SuppressWarnings("unused") public class EditSampleTypeDialog { @Locate("openbis_edit-type-dialog-description") - private Text description; + private TextArea description; @Locate("openbis_add-type-dialog-listable") private Checkbox listable; 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 97acb322e51..504e3f16887 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 @@ -16,14 +16,15 @@ package ch.systemsx.cisd.openbis.uitest.page.tab; +import ch.systemsx.cisd.openbis.uitest.infra.Contextual; +import ch.systemsx.cisd.openbis.uitest.infra.Fillable; 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.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.Widget; +import ch.systemsx.cisd.openbis.uitest.widget.Dynamic; public class AssignSamplePropertyType { @@ -39,7 +40,7 @@ public class AssignSamplePropertyType @Lazy @Locate("openbis_property-type-assignment_SAMPLEdefault_value") - private Widget initialValue; + private Dynamic initialValue; @Locate("openbis_property-type-assignment_SAMPLEsave-button") private Button save; @@ -52,7 +53,9 @@ public class AssignSamplePropertyType if (assignment.getInitialValue() != null && assignment.getInitialValue().length() > 0) { - ((Fillable) initialValue).fillWith(assignment.getInitialValue()); + Contextual c = + initialValue.define(assignment.getPropertyType().getDataType().representedAs()); + ((Fillable) c).fillWith(assignment.getInitialValue()); } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/LoginPage.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/LoginPage.java index 77c1faa36a3..1d13ce42b5c 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/LoginPage.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/LoginPage.java @@ -17,7 +17,7 @@ package ch.systemsx.cisd.openbis.uitest.page.tab; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Locate; -import ch.systemsx.cisd.openbis.uitest.widget.Button; +import ch.systemsx.cisd.openbis.uitest.widget.SubmitButton; import ch.systemsx.cisd.openbis.uitest.widget.Text; public class LoginPage @@ -29,7 +29,7 @@ public class LoginPage private Text password; @Locate("openbis_login_submit") - private Button button; + private SubmitButton button; public void loginAs(String user, String pwd) { 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 fae6edc5692..be57fc53ad6 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 @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.HashSet; import java.util.Map; +import ch.systemsx.cisd.openbis.uitest.infra.Fillable; 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; @@ -27,7 +28,6 @@ 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.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; diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/ExperimentTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/ExperimentTest.java index 93dfef7a7d6..f6f71dcac8e 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/ExperimentTest.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/ExperimentTest.java @@ -42,7 +42,7 @@ public class ExperimentTest extends SeleniumTest Experiment experiment = create(anExperiment().in(project).withSamples(sample)); - assertThat(sampleBrowser().cell(sample, "Experiment"), displays(experiment.getCode())); - assertThat(sampleBrowser().cell(sample, "Project"), displays(project.getCode())); + assertThat(cell(sample, "Experiment").of(sampleBrowser()), displays(experiment.getCode())); + assertThat(cell(sample, "Project").of(sampleBrowser()), displays(project.getCode())); } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/PropertyTypeAssignmentTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/PropertyTypeAssignmentTest.java index 4de3402039c..239551cbc65 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/PropertyTypeAssignmentTest.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/PropertyTypeAssignmentTest.java @@ -20,7 +20,10 @@ import static org.hamcrest.MatcherAssert.assertThat; import org.testng.annotations.Test; +import ch.systemsx.cisd.openbis.uitest.type.PropertyType; import ch.systemsx.cisd.openbis.uitest.type.PropertyTypeAssignment; +import ch.systemsx.cisd.openbis.uitest.type.Sample; +import ch.systemsx.cisd.openbis.uitest.type.SampleType; /** * @author anttil @@ -32,9 +35,27 @@ public class PropertyTypeAssignmentTest extends SeleniumTest @Test public void newPropertyTypeAssignmentIsListedInPropertyTypeAssignmentBrowser() throws Exception { - PropertyTypeAssignment assignment = - create(aSamplePropertyTypeAssignment()); + PropertyTypeAssignment assignment = create(aSamplePropertyTypeAssignment()); assertThat(propertyTypeAssignmentBrowser(), lists(assignment)); } + + @Test + public void existingSamplesGetInitialValueSetForNewProperty() + throws Exception + { + SampleType sampleType = create(aSampleType()); + Sample sample = create(aSample().ofType(sampleType)); + + PropertyType propertyType = create(aVarcharPropertyType()); + + create(aSamplePropertyTypeAssignment() + .with(sampleType) + .with(propertyType) + .thatIsMandatory() + .havingInitialValueOf("Test Initial Value")); + + assertThat(cell(sample, propertyType.getLabel()).of(sampleBrowser()), + displays("Test Initial Value")); + } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SampleTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SampleTest.java index 550c458cb92..0df8c3f36c9 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SampleTest.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SampleTest.java @@ -76,8 +76,8 @@ public class SampleTest extends SeleniumTest Sample sample = create(aSample().ofType(sampleType).withProperty(vocabularyType, "mouse")); - assertThat(sampleBrowser().cell(sample, vocabularyType.getLabel()), displays("mouse")); - assertThat(sampleBrowser().cell(sample, vocabularyType.getLabel()), + assertThat(cell(sample, vocabularyType.getLabel()).of(sampleBrowser()), displays("mouse")); + assertThat(cell(sample, vocabularyType.getLabel()).of(sampleBrowser()), linksTo("http://www.ask.com/web?q=MOUSE")); } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SeleniumTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SeleniumTest.java index cc8fdc45ea6..06f2d48def6 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SeleniumTest.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SeleniumTest.java @@ -101,7 +101,7 @@ public abstract class SeleniumTest System.setProperty("webdriver.firefox.profile", "default"); driver = new FirefoxDriver(); - driver.manage().timeouts().implicitlyWait(IMPLICIT_WAIT, TimeUnit.SECONDS); + setImplicitWaitToDefault(); delete(new File("targets/dist")); driver.manage().deleteAllCookies(); @@ -116,6 +116,16 @@ public abstract class SeleniumTest driver.get(url); } + public static void setImplicitWait(long amount, TimeUnit unit) + { + driver.manage().timeouts().implicitlyWait(amount, unit); + } + + public static void setImplicitWaitToDefault() + { + driver.manage().timeouts().implicitlyWait(IMPLICIT_WAIT, TimeUnit.SECONDS); + } + @AfterSuite public void closeBrowser() { @@ -273,6 +283,30 @@ public abstract class SeleniumTest return new RegisterSampleFormContainsInputsForPropertiesMatcher(fields); } + protected <T extends Browsable> CellExtractor<T> cell(T browsable, String column) + { + return new CellExtractor<T>(browsable, column); + } + + protected class CellExtractor<T extends Browsable> + { + private final T browsable; + + private final String column; + + public CellExtractor(T browsable, String column) + { + this.browsable = browsable; + this.column = column; + } + + public Cell of(Browser<T> browser) + { + browser.filter(browsable); + return browser.cell(browsable, column); + } + } + protected Matcher<Cell> linksTo(String url) { return new CellLinksToMatcher(url); diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SprintTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SprintTest.java index 0b6cb262ad6..b9150c124ca 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SprintTest.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/suite/SprintTest.java @@ -124,8 +124,9 @@ public class SprintTest extends SeleniumTest .withProperty(animalPropertyType, "mouse")); assertThat(sampleBrowser(), lists(sample)); - assertThat(sampleBrowser().cell(sample, animalPropertyType.getLabel()), displays("mouse")); - assertThat(sampleBrowser().cell(sample, animalPropertyType.getLabel()), + assertThat(cell(sample, animalPropertyType.getLabel()).of(sampleBrowser()), + displays("mouse")); + assertThat(cell(sample, animalPropertyType.getLabel()).of(sampleBrowser()), linksTo("http://www.ask.com/web?q=MOUSE")); // 5) Project and experiment @@ -135,7 +136,7 @@ public class SprintTest extends SeleniumTest Experiment experiment = create(anExperiment().ofType(experimentType).in(project).withCode("exp1") .withSamples(sample)); - assertThat(sampleBrowser().cell(sample, "Experiment"), displays(experiment.getCode())); - assertThat(sampleBrowser().cell(sample, "Project"), displays(project.getCode())); + assertThat(cell(sample, "Experiment").of(sampleBrowser()), displays(experiment.getCode())); + assertThat(cell(sample, "Project").of(sampleBrowser()), displays(project.getCode())); } } 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 0af09b6c2bf..40fbced28cb 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,16 +16,17 @@ package ch.systemsx.cisd.openbis.uitest.type; +import ch.systemsx.cisd.openbis.uitest.infra.Fillable; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; 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", Checkbox.class), HYPERLINK("HYPERLINK", Text.class), @@ -40,9 +41,9 @@ public enum PropertyTypeDataType private String name; - private Class<? extends Widget> widgetClass; + private Class<?> widgetClass; - private PropertyTypeDataType(String name, Class<? extends Widget> widgetClass) + private <T extends Widget & Fillable> PropertyTypeDataType(String name, Class<T> widgetClass) { this.name = name; this.widgetClass = widgetClass; @@ -53,17 +54,9 @@ public enum PropertyTypeDataType return this.name; } - public Widget representedAs() + @SuppressWarnings("unchecked") + public <T extends Widget & Fillable> Class<T> representedAs() { - try - { - return widgetClass.newInstance(); - } catch (InstantiationException ex) - { - throw new RuntimeException(ex); - } catch (IllegalAccessException ex) - { - throw new RuntimeException(ex); - } + return (Class<T>) widgetClass; } } 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 index 2ccf348d20a..d7e87c1a14e 100644 --- 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 @@ -16,8 +16,8 @@ package ch.systemsx.cisd.openbis.uitest.type; -import ch.systemsx.cisd.openbis.uitest.widget.Fillable; -import ch.systemsx.cisd.openbis.uitest.widget.Widget; +import ch.systemsx.cisd.openbis.uitest.infra.Fillable; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; /** * @author anttil 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 98f971d490d..94c132e8e2b 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,15 +16,27 @@ package ch.systemsx.cisd.openbis.uitest.widget; +import ch.systemsx.cisd.openbis.uitest.infra.Contextual; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; /** * @author anttil */ -public class AlertMessageBox extends Widget +public class AlertMessageBox implements Contextual { + + private WidgetWebElement context; + public void dismiss() { - Button ok = find(".//button[text()=\"OK\"]").handleAs(Button.class); + Button ok = context.find(".//button[text()=\"OK\"]", Button.class); ok.click(); } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } + } 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 32e776acd77..480aca59458 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 @@ -16,13 +16,18 @@ package ch.systemsx.cisd.openbis.uitest.widget; -import org.openqa.selenium.WebElement; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; + /** * @author anttil */ -public class Button extends Widget +public class Button implements Widget { + + private WidgetWebElement context; + public void click() { context.click(); @@ -30,14 +35,18 @@ public class Button extends Widget public boolean isPressed() { - WebElement button; - if (context.getTagName().equals("button")) - { - button = context; - } else - { - button = find(".//button").getContext(); - } - return "true".equalsIgnoreCase(button.getAttribute("aria-pressed")); + return "true".equalsIgnoreCase(context.getAttribute("aria-pressed")); + } + + @Override + public String getTagName() + { + return "button"; + } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; } } 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 e2c25b8b05d..0227f69eb6d 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 @@ -16,19 +16,24 @@ package ch.systemsx.cisd.openbis.uitest.widget; -import org.openqa.selenium.WebElement; +import ch.systemsx.cisd.openbis.uitest.infra.Fillable; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; + /** * @author anttil */ -public class Checkbox extends Widget implements Fillable +public class Checkbox implements Widget, Fillable { + + private WidgetWebElement context; + public void set(boolean value) { - WebElement input = find("input").getContext(); - if (input.getAttribute("checked") != null ^ value) + if (context.getAttribute("checked") != null ^ value) { - input.click(); + context.click(); } } @@ -37,4 +42,16 @@ public class Checkbox extends Widget implements Fillable { set("true".equalsIgnoreCase(string)); } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } + + @Override + public String getTagName() + { + return "input"; + } } 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 043a9a48daa..cbdf376ced4 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,16 +16,20 @@ package ch.systemsx.cisd.openbis.uitest.widget; +import ch.systemsx.cisd.openbis.uitest.infra.Contextual; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; + /** * @author anttil */ -public class DeletionConfirmationBox extends Widget +public class DeletionConfirmationBox implements Contextual { + private WidgetWebElement context; + public void confirm(String reason) { - TextArea text = find(".//textarea").handleAs(TextArea.class); + TextArea text = context.find(".//textarea", TextArea.class); text.write(reason); - getOkButton().click(); } @@ -36,6 +40,12 @@ public class DeletionConfirmationBox extends Widget private Button getOkButton() { - return find(".//button[text()=\"OK\"]").handleAs(Button.class); + return context.find(".//button[text()=\"OK\"]", Button.class); + } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; } } 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 8bed7177f26..653495d8261 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 @@ -25,13 +25,18 @@ import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; +import ch.systemsx.cisd.openbis.uitest.infra.Fillable; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; import ch.systemsx.cisd.openbis.uitest.suite.SeleniumTest; /** * @author anttil */ -public class DropDown extends Widget implements Fillable +public class DropDown implements Widget, Fillable { + private WidgetWebElement context; + public void select(String text) { Collection<String> found = new HashSet<String>(); @@ -60,8 +65,7 @@ public class DropDown extends Widget implements Fillable private List<WebElement> getChoiceElements() { - WebElement opener = find(".//img").getContext(); - opener.click(); + context.click(); return SeleniumTest.driver.findElements(By.className("x-combo-list-item")); } @@ -71,4 +75,16 @@ public class DropDown extends Widget implements Fillable select(string); } + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } + + @Override + public String getTagName() + { + return "img"; + } + } 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/Dynamic.java similarity index 54% rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Widget.java rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Dynamic.java index 8abaeaa3f21..a66984713e3 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/Dynamic.java @@ -16,48 +16,24 @@ package ch.systemsx.cisd.openbis.uitest.widget; -import java.util.List; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; +import ch.systemsx.cisd.openbis.uitest.infra.Contextual; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; /** * @author anttil */ -public abstract class Widget +public class Dynamic implements Contextual { - protected WebElement context; - - public void setContext(WebElement context) - { - this.context = context; - } - - public WebElement getContext() - { - return context; - } - protected Widget find(String xpath) - { - Widget w = new Widget() - { - }; - w.setContext(context.findElement(By.xpath(xpath))); - return w; - } + private WidgetWebElement context; - protected List<WebElement> findAll(String xpath) + public Contextual define(Class<? extends Contextual> clazz) { - return context.findElements(By.xpath(xpath)); - } - - public <T extends Widget> T handleAs(Class<T> clazz) - { - T t; + Contextual widget; try { - t = clazz.newInstance(); + widget = clazz.newInstance(); } catch (InstantiationException ex) { throw new RuntimeException(ex); @@ -65,7 +41,24 @@ public abstract class Widget { throw new RuntimeException(ex); } - t.setContext(context); - return t; + + if (widget instanceof Widget) + { + Widget w = (Widget) widget; + if (!w.getTagName().equals(context.getTagName())) + { + widget.setContext(new WidgetWebElement(context.find(".//" + w.getTagName()))); + return widget; + } + } + widget.setContext(this.context); + return widget; } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } + } 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 799de235113..6d61a184bec 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,18 +16,22 @@ package ch.systemsx.cisd.openbis.uitest.widget; +import ch.systemsx.cisd.openbis.uitest.infra.Contextual; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Action; import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WaitForRefreshOf; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; /** * @author anttil */ -public class FilterToolBar extends Widget +public class FilterToolBar implements Contextual { + private WidgetWebElement context; + public void setCode(final String text, Grid refreshingGrid) { - final Text t = find(".//input[contains(@id, 'Code-input')]").handleAs(Text.class); + final Text t = context.find(".//input[contains(@id, 'Code-input')]", Text.class); new WaitForRefreshOf(refreshingGrid).after(new Action() { @@ -42,7 +46,13 @@ public class FilterToolBar extends Widget public void reset() { - Button b = find(".//button[text()='Reset']").handleAs(Button.class); + Button b = context.find(".//button[text()='Reset']", Button.class); b.click(); } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } } 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 a555229a209..81a0e8d302c 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,23 +22,46 @@ import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; +import ch.systemsx.cisd.openbis.uitest.infra.Contextual; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; import ch.systemsx.cisd.openbis.uitest.type.PropertyType; /** * @author anttil */ -public class Form extends Widget +public class Form implements Contextual { + private WidgetWebElement context; + public Widget getWidget(PropertyType type) { - List<WebElement> elements = findAll(".//form/div/label"); + List<WebElement> elements = context.findAll(".//form/div/label"); for (WebElement element : elements) { if (element.getText().toLowerCase().startsWith(type.getLabel().toLowerCase())) { - Widget w = type.getDataType().representedAs(); - w.setContext(element.findElement(By.xpath("../div/div"))); + + Widget w; + try + { + w = type.getDataType().representedAs().newInstance(); + } catch (InstantiationException ex) + { + throw new RuntimeException(ex); + } catch (IllegalAccessException ex) + { + throw new RuntimeException(ex); + } + + WebElement e = element.findElement(By.xpath("../div/div")); + if (w.getTagName() != null && !e.getTagName().equals(w.getTagName())) + { + e = e.findElement(By.xpath(".//" + w.getTagName())); + } + + w.setContext(new WidgetWebElement(e)); return w; } } @@ -48,11 +71,17 @@ public class Form extends Widget public List<String> getLabels() { List<String> labels = new ArrayList<String>(); - List<WebElement> elements = findAll(".//form/div/label"); + List<WebElement> elements = context.findAll(".//form/div/label"); for (WebElement element : elements) { labels.add(element.getText()); } return labels; } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } } 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 3b5ea166c69..f8f4e568ff3 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 @@ -25,16 +25,20 @@ import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import ch.systemsx.cisd.openbis.uitest.infra.Cell; +import ch.systemsx.cisd.openbis.uitest.infra.Contextual; +import ch.systemsx.cisd.openbis.uitest.infra.Refreshing; import ch.systemsx.cisd.openbis.uitest.infra.Row; -import ch.systemsx.cisd.openbis.uitest.infra.webdriver.Refreshing; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; import ch.systemsx.cisd.openbis.uitest.suite.SeleniumTest; /** * @author anttil */ -public class Grid extends Widget implements Refreshing +public class Grid implements Contextual, Refreshing { + private WidgetWebElement context; + public Row select(String column, String value) { @@ -90,19 +94,20 @@ public class Grid extends Widget implements Refreshing private List<WebElement> getColumns() { - return findAll(".//td[not(ancestor::div[contains(@style,'display:none')]) and contains(@class, 'x-grid') and contains(@class, '-header ')]//span[not(*)]"); + return context + .findAll(".//td[not(ancestor::div[contains(@style,'display:none')]) and contains(@class, 'x-grid') and contains(@class, '-header ')]//span[not(*)]"); } private List<WebElement> getCells() { - SeleniumTest.driver.manage().timeouts().implicitlyWait(500, TimeUnit.MILLISECONDS); + SeleniumTest.setImplicitWait(500, TimeUnit.MILLISECONDS); try { - return findAll(".//td[not(ancestor::div[contains(@style,'display:none')]) and contains(@class, 'x-grid') and contains(@class, '-col ')]//*[not(*)]"); + return context + .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); + SeleniumTest.setImplicitWaitToDefault(); } } @@ -135,4 +140,10 @@ public class Grid extends Widget implements Refreshing { return "" + this.getCells().size(); } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Link.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Link.java index c8d4a0f8e4a..f93b17bf78f 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Link.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/Link.java @@ -16,15 +16,16 @@ package ch.systemsx.cisd.openbis.uitest.widget; -import org.openqa.selenium.interactions.Actions; - -import ch.systemsx.cisd.openbis.uitest.suite.SeleniumTest; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; /** * @author anttil */ -public class Link extends Widget +public class Link implements Widget { + private WidgetWebElement context; + public void click() { context.click(); @@ -32,7 +33,18 @@ public class Link extends Widget public void highlight() { - Actions builder = new Actions(SeleniumTest.driver); - builder.moveToElement(context).build().perform(); + context.mouseOver(); + } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } + + @Override + public String getTagName() + { + return "a"; } } 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 c5f76713719..66c9036f6bc 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,19 +16,29 @@ package ch.systemsx.cisd.openbis.uitest.widget; +import ch.systemsx.cisd.openbis.uitest.infra.Contextual; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; /** * @author anttil */ -public class PagingToolBar extends Widget +public class PagingToolBar implements Contextual { + private WidgetWebElement context; + public void filters() { - Button b = find(".//button[text()='Filters']").handleAs(Button.class); + Button b = context.find(".//button[text()='Filters']", Button.class); if (!b.isPressed()) { b.click(); } } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/SubmitButton.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/SubmitButton.java new file mode 100644 index 00000000000..6fc59c4430e --- /dev/null +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/SubmitButton.java @@ -0,0 +1,46 @@ +/* + * 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.widget; + +import ch.systemsx.cisd.openbis.uitest.infra.Widget; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; + +/** + * @author anttil + */ +public class SubmitButton implements Widget +{ + + private WidgetWebElement context; + + public void click() + { + context.click(); + } + + @Override + public String getTagName() + { + return "input"; + } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } +} 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 c27cbd56a6f..24053f5cdbe 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 @@ -16,45 +16,50 @@ package ch.systemsx.cisd.openbis.uitest.widget; -import org.openqa.selenium.WebElement; +import ch.systemsx.cisd.openbis.uitest.infra.Fillable; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; + /** * @author anttil */ -public class Text extends Widget implements Fillable +public class Text implements Widget, Fillable { + private WidgetWebElement context; + public void write(String text) { - WebElement element = getInputElement(); - element.clear(); - element.sendKeys(text); + context.clear(); + context.sendKeys(text); } public void clear() { - getInputElement().clear(); + context.clear(); } public void append(String text) { - getInputElement().sendKeys(text); + context.sendKeys(text); } - private WebElement getInputElement() + @Override + public void fillWith(String string) { - if (context.getTagName().equals("input")) - { - return context; - } else - { - return find("input").getContext(); - } + write(string); } @Override - public void fillWith(String string) + public void setContext(WidgetWebElement context) { - write(string); + this.context = context; + } + + @Override + public String getTagName() + { + return "input"; } } 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 e4cc7a41e11..46ae4ac7547 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 @@ -16,28 +16,31 @@ package ch.systemsx.cisd.openbis.uitest.widget; -import org.openqa.selenium.WebElement; +import ch.systemsx.cisd.openbis.uitest.infra.Fillable; +import ch.systemsx.cisd.openbis.uitest.infra.Widget; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; /** * @author anttil */ -public class TextArea extends Widget implements Fillable +public class TextArea implements Widget, Fillable { + private WidgetWebElement context; + public void write(String text) { - WebElement element = getElement(); - element.clear(); - element.sendKeys(text); + context.clear(); + context.sendKeys(text); } public void clear() { - getElement().clear(); + context.clear(); } public void append(String text) { - getElement().sendKeys(text); + context.sendKeys(text); } @Override @@ -46,14 +49,15 @@ public class TextArea extends Widget implements Fillable write(string); } - private WebElement getElement() + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } + + @Override + public String getTagName() { - if (context.getTagName().equals("textarea")) - { - return context; - } else - { - return find(".//textarea").getContext(); - } + return "textarea"; } } diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/TreeGrid.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/TreeGrid.java index c7c86e1ff87..4da7211cdc8 100644 --- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/TreeGrid.java +++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/widget/TreeGrid.java @@ -22,14 +22,19 @@ import java.util.List; import org.openqa.selenium.WebElement; +import ch.systemsx.cisd.openbis.uitest.infra.Contextual; +import ch.systemsx.cisd.openbis.uitest.infra.webdriver.WidgetWebElement; + /** * @author anttil */ -public class TreeGrid extends Widget +public class TreeGrid implements Contextual { + private WidgetWebElement context; + public void select(String label) { - List<WebElement> elements = findAll(".//span[not(*) and @class='gwt-InlineHTML']"); + List<WebElement> elements = context.findAll(".//span[not(*) and @class='gwt-InlineHTML']"); Collection<String> found = new ArrayList<String>(); for (WebElement element : elements) @@ -47,4 +52,10 @@ public class TreeGrid extends Widget throw new IllegalArgumentException("Selection " + label + " not found - these were found: " + found); } + + @Override + public void setContext(WidgetWebElement context) + { + this.context = context; + } } -- GitLab