Revision cb03d03f
Added by Andreas Kohlbecker about 12 years ago
.gitattributes | ||
---|---|---|
258 | 258 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/junit/CdmDataPortalSeleniumRCTestBase.java -text |
259 | 259 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/junit/CdmDataPortalTestBase.java -text |
260 | 260 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/junit/DataPortalContextSuite.java -text |
261 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/pages/PolytomousKeyPage.java -text |
|
262 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/pages/PortalPage.java -text |
|
261 | 263 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/selenium/JUnitWebDriverWait.java -text |
262 | 264 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/selenium/VisibilityOfElementLocated.java -text |
263 | 265 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/selenium/WebDriverFactory.java -text |
264 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/testutils/PolytomousKeyTestTool.java -text |
|
265 | 266 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/resources/eu/etaxonomy/dataportal/DataPortalTest.properties -text |
266 | 267 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/resources/log4j.properties -text |
267 | 268 |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/test/java/eu/etaxonomy/dataportal/selenium/ExampleTest.java -text |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/pages/PolytomousKeyPage.java | ||
---|---|---|
1 |
package eu.etaxonomy.dataportal.pages; |
|
2 |
|
|
3 |
import java.net.MalformedURLException; |
|
4 |
import java.util.List; |
|
5 |
|
|
6 |
import org.apache.log4j.Logger; |
|
7 |
import org.junit.Assert; |
|
8 |
import org.openqa.selenium.By; |
|
9 |
import org.openqa.selenium.RenderedWebElement; |
|
10 |
import org.openqa.selenium.WebDriver; |
|
11 |
import org.openqa.selenium.WebElement; |
|
12 |
import org.openqa.selenium.support.CacheLookup; |
|
13 |
import org.openqa.selenium.support.FindBy; |
|
14 |
import org.openqa.selenium.support.PageFactory; |
|
15 |
|
|
16 |
import eu.etaxonomy.dataportal.selenium.VisibilityOfElementLocated; |
|
17 |
|
|
18 |
public class PolytomousKeyPage extends PortalPage{ |
|
19 |
|
|
20 |
public PolytomousKeyPage(WebDriver driver) throws MalformedURLException { |
|
21 |
super(driver); |
|
22 |
} |
|
23 |
|
|
24 |
public static final Logger logger = Logger.getLogger(PolytomousKeyPage.class); |
|
25 |
|
|
26 |
@FindBy(className="polytomousKey") |
|
27 |
@CacheLookup |
|
28 |
private WebElement keyTable; |
|
29 |
|
|
30 |
private List<WebElement> keyTableRows; |
|
31 |
|
|
32 |
|
|
33 |
|
|
34 |
public static class KeyLineData{ |
|
35 |
|
|
36 |
String nodeNumber = null; |
|
37 |
String edgeText = null; |
|
38 |
LinkClass linkClass = null; |
|
39 |
String linkText = null; |
|
40 |
|
|
41 |
|
|
42 |
public String getNodeNumber() { |
|
43 |
return nodeNumber; |
|
44 |
} |
|
45 |
|
|
46 |
public String getEdgeText() { |
|
47 |
return edgeText; |
|
48 |
} |
|
49 |
|
|
50 |
public LinkClass getLinkClass() { |
|
51 |
return linkClass; |
|
52 |
} |
|
53 |
|
|
54 |
public String getLinkText() { |
|
55 |
return linkText; |
|
56 |
} |
|
57 |
|
|
58 |
public KeyLineData(String nodeNumber, String edgeText, LinkClass linkClass, String linkText) { |
|
59 |
this.nodeNumber = nodeNumber; |
|
60 |
this.edgeText = edgeText; |
|
61 |
this.linkClass = linkClass; |
|
62 |
this.linkText = linkText; |
|
63 |
} |
|
64 |
} |
|
65 |
|
|
66 |
public enum LinkClass { |
|
67 |
nodeLinkToNode, |
|
68 |
nodeLinkToTaxon; |
|
69 |
} |
|
70 |
|
|
71 |
public PortalPage followPolytomousKeyLine(int lineIndex, KeyLineData data) { |
|
72 |
|
|
73 |
keyTableRows = keyTable.findElements(By.xpath("tbody/tr")); |
|
74 |
WebElement keyEntry = keyTableRows.get(lineIndex); |
|
75 |
Assert.assertEquals("node number", data.nodeNumber, keyEntry.findElement(By.className("nodeNumber")).getText()); |
|
76 |
Assert.assertEquals("edge text", data.edgeText + data.linkText, keyEntry.findElement(By.className("edge")).getText()); |
|
77 |
WebElement linkContainer = keyEntry.findElement(By.className(data.linkClass.name())); |
|
78 |
RenderedWebElement link = (RenderedWebElement)linkContainer.findElement(By.tagName("a")); |
|
79 |
Assert.assertEquals("link text", data.linkText, link.getText()); |
|
80 |
logger.info("testing " + data.linkClass.name() + " : " + getInitialUrlBase() + ":" + link.getAttribute("href")); |
|
81 |
link.click(); |
|
82 |
wait.until(new VisibilityOfElementLocated(By.id("container"))); |
|
83 |
|
|
84 |
return PageFactory.initElements(driver, PortalPage.class); |
|
85 |
} |
|
86 |
|
|
87 |
} |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/pages/PortalPage.java | ||
---|---|---|
1 |
package eu.etaxonomy.dataportal.pages; |
|
2 |
|
|
3 |
import java.net.MalformedURLException; |
|
4 |
import java.net.URL; |
|
5 |
|
|
6 |
import org.apache.log4j.Logger; |
|
7 |
import org.openqa.selenium.RenderedWebElement; |
|
8 |
import org.openqa.selenium.WebDriver; |
|
9 |
import org.openqa.selenium.support.CacheLookup; |
|
10 |
import org.openqa.selenium.support.FindBy; |
|
11 |
import org.openqa.selenium.support.PageFactory; |
|
12 |
|
|
13 |
import eu.etaxonomy.dataportal.selenium.JUnitWebDriverWait; |
|
14 |
|
|
15 |
public class PortalPage { |
|
16 |
|
|
17 |
public static final Logger logger = Logger.getLogger(PortalPage.class); |
|
18 |
|
|
19 |
protected WebDriver driver; |
|
20 |
protected final JUnitWebDriverWait wait; |
|
21 |
protected URL initialUrl; |
|
22 |
|
|
23 |
@FindBy(id= "cdm_dataportal.node") |
|
24 |
@CacheLookup |
|
25 |
private RenderedWebElement portalContent; |
|
26 |
|
|
27 |
@FindBy(tagName= "title") |
|
28 |
@CacheLookup |
|
29 |
private RenderedWebElement title; |
|
30 |
|
|
31 |
public PortalPage(WebDriver driver) throws MalformedURLException { |
|
32 |
this.driver = driver; |
|
33 |
this.initialUrl = new URL(driver.getCurrentUrl()); |
|
34 |
this.wait = new JUnitWebDriverWait(driver, 25); |
|
35 |
logger.info("new " + this.getClass().getSimpleName() + " for " + initialUrl); |
|
36 |
} |
|
37 |
|
|
38 |
public void goToInitialPage() { |
|
39 |
driver.get(initialUrl.toString()); |
|
40 |
PageFactory.initElements(driver, this); |
|
41 |
} |
|
42 |
|
|
43 |
public String getTitle() { |
|
44 |
return title.getText(); |
|
45 |
} |
|
46 |
|
|
47 |
public String getURL() { |
|
48 |
return driver.getCurrentUrl(); |
|
49 |
} |
|
50 |
|
|
51 |
/** |
|
52 |
* return the <code>scheme://domain:port</code> part of the initial url of this page. |
|
53 |
* @return |
|
54 |
*/ |
|
55 |
public String getInitialUrlBase() { |
|
56 |
return initialUrl.getProtocol() + "://" + initialUrl.getHost() + initialUrl.getPort(); |
|
57 |
} |
|
58 |
|
|
59 |
public boolean equals(Object obj) { |
|
60 |
if (PortalPage.class.isAssignableFrom(obj.getClass())) { |
|
61 |
PortalPage page = (PortalPage) obj; |
|
62 |
return this.getTitle().equals(page.getTitle()) |
|
63 |
&& this.getURL().equals(page.getURL()); |
|
64 |
|
|
65 |
} else { |
|
66 |
return false; |
|
67 |
} |
|
68 |
} |
|
69 |
|
|
70 |
} |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/main/java/eu/etaxonomy/dataportal/testutils/PolytomousKeyTestTool.java | ||
---|---|---|
1 |
/** |
|
2 |
* |
|
3 |
*/ |
|
4 |
package eu.etaxonomy.dataportal.testutils; |
|
5 |
|
|
6 |
import java.util.List; |
|
7 |
import java.util.Map; |
|
8 |
|
|
9 |
import org.apache.log4j.Logger; |
|
10 |
import org.junit.Assert; |
|
11 |
import org.openqa.selenium.By; |
|
12 |
import org.openqa.selenium.JavascriptExecutor; |
|
13 |
import org.openqa.selenium.RenderedWebElement; |
|
14 |
import org.openqa.selenium.WebDriver; |
|
15 |
import org.openqa.selenium.WebElement; |
|
16 |
import org.openqa.selenium.support.ui.WebDriverWait; |
|
17 |
|
|
18 |
import eu.etaxonomy.dataportal.selenium.JUnitWebDriverWait; |
|
19 |
import eu.etaxonomy.dataportal.selenium.VisibilityOfElementLocated; |
|
20 |
import eu.etaxonomy.dataportal.selenium.WebDriverFactory; |
|
21 |
|
|
22 |
/** |
|
23 |
* @author a.kohlbecker |
|
24 |
* |
|
25 |
*/ |
|
26 |
public class PolytomousKeyTestTool { |
|
27 |
|
|
28 |
public static final Logger logger = Logger.getLogger(PolytomousKeyTestTool.class); |
|
29 |
|
|
30 |
Map<Integer, KeyLineData> linesUnderTest; // = new HashMap<Integer, KeyLineData>(); |
|
31 |
List<WebElement> keyTableRows; |
|
32 |
private final WebDriver webDriver; |
|
33 |
private final JUnitWebDriverWait wait; |
|
34 |
|
|
35 |
public PolytomousKeyTestTool(List<WebElement> keyTableRows, Map<Integer, KeyLineData> linesUnderTest, WebDriver webDriver){ |
|
36 |
this.linesUnderTest = linesUnderTest; |
|
37 |
this.keyTableRows = keyTableRows; |
|
38 |
this.webDriver = webDriver; |
|
39 |
wait = new JUnitWebDriverWait(webDriver, 15); |
|
40 |
} |
|
41 |
|
|
42 |
public void runTest(){ |
|
43 |
for(Integer key : linesUnderTest.keySet()){ |
|
44 |
testPolytomousKeyLine(keyTableRows.get(key), linesUnderTest.get(key)); |
|
45 |
} |
|
46 |
webDriver.close(); |
|
47 |
} |
|
48 |
|
|
49 |
public static class KeyLineData{ |
|
50 |
|
|
51 |
String nodeNumber = null; |
|
52 |
String edgeText = null; |
|
53 |
LinkClass linkClass = null; |
|
54 |
String linkText = null; |
|
55 |
|
|
56 |
public KeyLineData(String nodeNumber, String edgeText, LinkClass linkClass, String linkText) { |
|
57 |
this.nodeNumber = nodeNumber; |
|
58 |
this.edgeText = edgeText; |
|
59 |
this.linkClass = linkClass; |
|
60 |
this.linkText = linkText; |
|
61 |
} |
|
62 |
|
|
63 |
} |
|
64 |
|
|
65 |
public enum LinkClass { |
|
66 |
nodeLinkToNode, |
|
67 |
nodeLinkToTaxon; |
|
68 |
} |
|
69 |
|
|
70 |
public void testPolytomousKeyLine(WebElement keyEntry, KeyLineData data) { |
|
71 |
Assert.assertEquals("node number", data.nodeNumber, keyEntry.findElement(By.className("nodeNumber")).getText()); |
|
72 |
Assert.assertEquals("edge text", data.edgeText + data.linkText, keyEntry.findElement(By.className("edge")).getText()); |
|
73 |
WebElement linkContainer = keyEntry.findElement(By.className(data.linkClass.name())); |
|
74 |
RenderedWebElement link = (RenderedWebElement)linkContainer.findElement(By.tagName("a")); |
|
75 |
Assert.assertEquals("link text", data.linkText, link.getText()); |
|
76 |
logger.info("testing " + data.linkClass.name() + " : " + link.getAttribute("href")); |
|
77 |
link.click(); |
|
78 |
wait.until(new VisibilityOfElementLocated(By.id("container"))); |
|
79 |
webDriver.navigate().back(); |
|
80 |
} |
|
81 |
|
|
82 |
} |
modules/cdm_dataportal/test/java/dataportal-selenium-tests/src/test/java/eu/etaxonomy/dataportal/selenium/tests/FloraMalesianaPolytomousKeyTest.java | ||
---|---|---|
9 | 9 |
*/ |
10 | 10 |
package eu.etaxonomy.dataportal.selenium.tests; |
11 | 11 |
|
12 |
import java.util.HashMap; |
|
13 |
import java.util.List; |
|
14 |
import java.util.Map; |
|
15 |
|
|
16 | 12 |
import org.junit.Assert; |
17 | 13 |
import org.junit.Test; |
18 |
import org.openqa.selenium.By; |
|
19 |
import org.openqa.selenium.RenderedWebElement; |
|
20 |
import org.openqa.selenium.WebElement; |
|
14 |
import org.openqa.selenium.support.PageFactory; |
|
21 | 15 |
|
22 | 16 |
import eu.etaxonomy.dataportal.DataPortalContext; |
23 | 17 |
import eu.etaxonomy.dataportal.junit.CdmDataPortalTestBase; |
24 | 18 |
import eu.etaxonomy.dataportal.junit.DataPortalContextSuite.DataPortalContexts; |
25 |
import eu.etaxonomy.dataportal.testutils.PolytomousKeyTestTool; |
|
26 |
import eu.etaxonomy.dataportal.testutils.PolytomousKeyTestTool.KeyLineData; |
|
27 |
import eu.etaxonomy.dataportal.testutils.PolytomousKeyTestTool.LinkClass; |
|
19 |
import eu.etaxonomy.dataportal.pages.PolytomousKeyPage; |
|
20 |
import eu.etaxonomy.dataportal.pages.PolytomousKeyPage.KeyLineData; |
|
21 |
import eu.etaxonomy.dataportal.pages.PolytomousKeyPage.LinkClass; |
|
22 |
import eu.etaxonomy.dataportal.pages.PortalPage; |
|
28 | 23 |
|
29 | 24 |
/** |
30 | 25 |
* @author a.kohlbecker |
31 | 26 |
* |
32 | 27 |
*/ |
33 | 28 |
|
34 |
@DataPortalContexts( { DataPortalContext.floramalesiana })
|
|
35 |
public class FloraMalesianaPolytomousKeyTest extends CdmDataPortalTestBase{ |
|
29 |
@DataPortalContexts({ DataPortalContext.floramalesiana }) |
|
30 |
public class FloraMalesianaPolytomousKeyTest extends CdmDataPortalTestBase {
|
|
36 | 31 |
|
37 | 32 |
/** |
38 | 33 |
* see http://dev.e-taxonomy.eu/trac/ticket/2350 |
34 |
* |
|
39 | 35 |
* @param WebDriver |
40 | 36 |
*/ |
41 | 37 |
@Test |
42 |
public void key_to_Malaysian_Sapindaceae_Genera(){ |
|
43 |
driver.get(getBaseUrl() + "?q=cdm_dataportal/polytomousKey/40cf3253-ce7a-4ad6-9a32-27695c36eb5d"); |
|
38 |
public void key_to_Malaysian_Sapindaceae_Genera() { |
|
44 | 39 |
|
45 |
// Page title |
|
46 |
RenderedWebElement element = (RenderedWebElement)driver.findElement(By.xpath(".//*[@id='squeeze']/div/div/h2")); |
|
47 |
Assert.assertEquals("KEY I TO THE MALESIAN GENERA (based on vegetative and flower characters) (F. Adema)", element.getText()); |
|
40 |
String pageUrlString = getBaseUrl() + "?q=cdm_dataportal/polytomousKey/40cf3253-ce7a-4ad6-9a32-27695c36eb5d"; |
|
48 | 41 |
|
49 |
List<WebElement> keyTableList = driver.findElements(By.className("polytomousKey")); |
|
50 |
Assert.assertEquals("Only one polytomousKey table expected", 1, keyTableList.size()); |
|
51 |
WebElement keyTable = keyTableList.get(0); |
|
42 |
driver.get(pageUrlString); |
|
52 | 43 |
|
53 |
List<WebElement> tableRows = keyTable.findElements(By.xpath("tbody/tr")); |
|
44 |
PolytomousKeyPage p = PageFactory.initElements(driver, PolytomousKeyPage.class); |
|
45 |
PortalPage targetPage; |
|
46 |
KeyLineData keyLineData; |
|
54 | 47 |
|
55 |
Map<Integer, PolytomousKeyTestTool.KeyLineData> keyLineDataMap = new HashMap<Integer, PolytomousKeyTestTool.KeyLineData>();
|
|
48 |
Assert.assertEquals("KEY I TO THE MALESIAN GENERA (based on vegetative and flower characters) (F. Adema)", p.getTitle());
|
|
56 | 49 |
|
57 |
keyLineDataMap.put(0, new KeyLineData(
|
|
58 |
"0",
|
|
50 |
// -------- //
|
|
51 |
keyLineData = new KeyLineData("0",
|
|
59 | 52 |
"Trees or shrubs, exceptionally lianas. Leaves simple, unifoliolate, (bi)pinnate or digitate. Inflorescences without basal tendrils", |
60 |
LinkClass.nodeLinkToNode, |
|
61 |
"1")); |
|
62 |
|
|
63 |
keyLineDataMap.put(1, new KeyLineData("0'", |
|
64 |
"Herbaceous or woody climbers. Leaves biternate. Inflorescences with basal tendrils", |
|
65 |
LinkClass.nodeLinkToTaxon, |
|
66 |
"Cardiospermum")); |
|
67 |
|
|
68 |
keyLineDataMap.put(2, new KeyLineData("1", |
|
69 |
"Leaves simple, unifoliolate, (im)paripinnate or digitate", |
|
70 |
LinkClass.nodeLinkToNode, |
|
71 |
"2")); |
|
72 |
|
|
73 |
keyLineDataMap.put(3, new KeyLineData("1'", |
|
74 |
"Leaves bipinnate", |
|
75 |
LinkClass.nodeLinkToTaxon, |
|
76 |
"Tristiropsis")); |
|
77 |
|
|
78 |
keyLineDataMap.put(126, new KeyLineData("116", |
|
53 |
LinkClass.nodeLinkToNode, "1"); |
|
54 |
targetPage = p.followPolytomousKeyLine(0, keyLineData); |
|
55 |
Assert.assertEquals(p, targetPage); |
|
56 |
|
|
57 |
// -------- // |
|
58 |
keyLineData = new KeyLineData("0'", "Herbaceous or woody climbers. Leaves biternate. Inflorescences with basal tendrils", |
|
59 |
LinkClass.nodeLinkToTaxon, "Cardiospermum"); |
|
60 |
targetPage = p.followPolytomousKeyLine(1, keyLineData); |
|
61 |
Assert.assertEquals(keyLineData.getLinkText(), targetPage.getTitle()); |
|
62 |
p.goToInitialPage(); |
|
63 |
|
|
64 |
// -------- // |
|
65 |
keyLineData = new KeyLineData("1", "Leaves simple, unifoliolate, (im)paripinnate or digitate", LinkClass.nodeLinkToNode, "2"); |
|
66 |
p.followPolytomousKeyLine(2, keyLineData); |
|
67 |
Assert.assertEquals(p, targetPage); |
|
68 |
|
|
69 |
// -------- // |
|
70 |
keyLineData = new KeyLineData("1'", "Leaves bipinnate", LinkClass.nodeLinkToTaxon, "Tristiropsis"); |
|
71 |
p.followPolytomousKeyLine(3, keyLineData); |
|
72 |
Assert.assertEquals(keyLineData.getLinkText(), targetPage.getTitle()); |
|
73 |
p.goToInitialPage(); |
|
74 |
|
|
75 |
// -------- // |
|
76 |
keyLineData = new KeyLineData( |
|
77 |
"116", |
|
79 | 78 |
"Leaflets entire or crenulate, lower surface without small glands. Inflorescences axillary, sometimes together pseudoterminal; cymes dense, many-flowered", |
80 |
LinkClass.nodeLinkToTaxon, |
|
81 |
"Synima cordierorum")); |
|
82 |
|
|
83 |
keyLineDataMap.put(127, new KeyLineData("116'", |
|
79 |
LinkClass.nodeLinkToTaxon, "Synima cordierorum"); |
|
80 |
Assert.assertEquals(keyLineData.getLinkText(), targetPage.getTitle()); |
|
81 |
p.followPolytomousKeyLine(126, keyLineData); |
|
82 |
p.goToInitialPage(); |
|
83 |
|
|
84 |
// -------- // |
|
85 |
keyLineData = new KeyLineData( |
|
86 |
"116'", |
|
84 | 87 |
"Leaflets entire, lower surface usually with small glands. Inflorescences axillary, together mostly pseudoterminal, by the shifting aside and suppression of the terminal bud sometimes seemingly truly terminal; cymes lax, 1- or few-flowered", |
85 |
LinkClass.nodeLinkToTaxon, |
|
86 |
"Trigonachras")); |
|
88 |
LinkClass.nodeLinkToTaxon, "Trigonachras"); |
|
89 |
Assert.assertEquals(keyLineData.getLinkText(), targetPage.getTitle()); |
|
90 |
p.followPolytomousKeyLine(127, keyLineData); |
|
87 | 91 |
|
88 |
PolytomousKeyTestTool tester = new PolytomousKeyTestTool(tableRows, keyLineDataMap, driver); |
|
89 |
|
|
90 |
tester.runTest(); |
|
91 | 92 |
} |
92 | 93 |
|
93 |
|
|
94 | 94 |
} |
Also available in: Unified diff
using PageFactory