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 0000000000000000000000000000000000000000..234588a528614fcb7449323e9df55460a9c49fb3 --- /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 be2c5863796621d9e598d308be4a6abf81dca8ff..7181c162c1f30b43c0ad1838c87553cb5282dfa0 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 7876b72cdaadc8d4ec6c53b18492356db24df01f..ed13891adca0b867f85931dfc15af20638ed96a8 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 0000000000000000000000000000000000000000..6517bebcc872c25e24199ca060aabf9642080ed6 --- /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 087037f4c5e9c58c9e3119e01c74ee1d40cee094..ee1fb656514ddee65b05eac5c1c94fcfcb587872 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 0ca199555459f0cdbb3d88055fcde5cd39602ae3..a2739d472417517cf150eff253c493dead0cfbd8 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 d0415744bc8bca8572714a056a25c0bc579c31e1..bf6472d69e3703af5687f76ef574d7af6a47203f 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 0000000000000000000000000000000000000000..e98938c4efd1c45aa4a3493fd072dc43a627cc83 --- /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 bb09f51be8dcc72b8594d657cae4f3a981864d77..1d200775a0d84158223222bc32417272100d3d2f 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 be1fc5449ca7dc1464d613a884d66d30eedaba3c..16b5986898850c2e2fdc11d0e1d144b1acc3ba31 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 97acb322e5121a3acad1c3e91ce9cb5cedc1a062..504e3f16887b0e5c27c3af4c29effa96c1e64c77 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 77c1faa36a3a5a96bfcd16b1acd79ac3dce5d47c..1d13ce42b5c0747aa608f86dc81ac629e6c8e1f3 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 fae6edc569218c575627e6655cac65e3fa3923d1..be57fc53ad642a0124ddf08448bed99e5fe4b277 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 93dfef7a7d6fda2fa4643a14e0ad8232df24cd10..f6f71dcac8e3db59c2f11b7f6736f30139c675a8 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 4de3402039cfe8924e51cf1da136513633a8cfa8..239551cbc65b9dc48c143579e8d087b34106ba29 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 550c458cb92ff8b21e872ac56094ec688b0b1a35..0df8c3f36c9dd6ceb67bc67f3dfcb975ad3baaf0 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 cc8fdc45ea6e73a6e4e9210ae1469206dbdbcfe4..06f2d48def6048a8abeada05e1ef0a8e921d9e6a 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 0b6cb262ad60b587844df617d8a5eb9aea614b99..b9150c124ca8bbc405e699c8d2a2e01b28168cde 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 0af09b6c2bf8be6fcf34f64aa1cf3ab35c4ec12b..40fbced28cba2431f947ebc908fd62c3f2a5ed63 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 2ccf348d20a15b69431f0fbb2904a26767e8c809..d7e87c1a14e35e442f37c0d571dce89673b338f5 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 98f971d490dd73fbd0ab240094e5e6c5b050514d..94c132e8e2b289d37b735005a51b9d739959db64 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 32e776acd77daa5300daf76f3babc150bf1e544c..480aca59458985da47c91f23487bcd4c25418ef6 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 e2c25b8b05d25f0eae902b327a97687b22b3eb84..0227f69eb6d045956a68af2883d18304bdd7ef10 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 043a9a48daa4908e084b36c55655759da39a6506..cbdf376ced4b3d452a534979a809589f3f45618d 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 8bed7177f2677393337e4c5f3ffb8ae5d2c90d74..653495d82612c0acab81e9b937422f98d2a1f4c0 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 8abaeaa3f211e65c5eeb0454adc060525bc37608..a66984713e3d011bf2243b21b36fd1f618a36616 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 799de2351137690d89f0a1db428a9d5c0e5969e7..6d61a184bec4724f40c7b6f89faaab61a49f0e93 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 a555229a209fc2d320a1c7e6eae9db24308eecfc..81a0e8d302cd9b9bda133fa288832d52520cb6a1 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 3b5ea166c691bbef0b723c1818bd77d89f48360b..f8f4e568ff3aef0e0266066395926fad5a557cf1 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 c8d4a0f8e4ae88ccb80f85b7ad0e4f6df20878aa..f93b17bf78fecf15802d44849948a2f0676609a2 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 c5f767137196e76a4f8df37d237cfea5093035f9..66c9036f6bc5fc5171b62a7c26494a6b2120ee0f 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 0000000000000000000000000000000000000000..6fc59c4430e154e6d0655a780769ce179139b437 --- /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 c27cbd56a6f45724558961435a14741ca27a51d3..24053f5cdbed70638f42070c7b78fea36d8abebe 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 e4cc7a41e11d42f7f91abeffff383bc582a33648..46ae4ac7547f2cf3fb057db93fca0bf903d80a43 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 c7c86e1ff87752c1feb87e83ffa6e58ed5923644..4da7211cdc8af33f1bc3ad5f12da244e5600a464 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; + } }