Project

General

Profile

« Previous | Next » 

Revision cb03d03f

Added by Andreas Kohlbecker almost 13 years ago

using PageFactory

View differences:

.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