1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package net.sourceforge.jwebunit.webdriver;
23
24 import java.util.ArrayList;
25 import java.util.List;
26
27 import net.sourceforge.jwebunit.api.IElement;
28
29 import org.openqa.selenium.By;
30 import org.openqa.selenium.JavascriptExecutor;
31 import org.openqa.selenium.WebDriver;
32 import org.openqa.selenium.WebElement;
33
34
35
36
37
38
39
40 public class WebDriverElementImpl implements IElement {
41
42
43
44
45 private WebElement element;
46
47
48
49
50 private WebDriver driver;
51
52 public WebDriverElementImpl(WebDriver driver, WebElement element) {
53 this.driver = driver;
54 if (element == null)
55 throw new NullPointerException("Cannot create an IElement for a null element.");
56 this.element = element;
57 }
58
59
60
61
62
63
64 public String getAttribute(String name) {
65 return element.getAttribute(name);
66 }
67
68
69
70
71
72
73 public String getName() {
74 return element.getTagName();
75 }
76
77
78
79
80
81
82 public List<IElement> getChildren() {
83 List<IElement> children = new ArrayList<IElement>();
84 for (WebElement e : element.findElements(By.xpath("child::*"))) {
85 if (e != null)
86 children.add(new WebDriverElementImpl(driver, e));
87 }
88 return children;
89 }
90
91
92
93
94
95
96 public IElement getParent() {
97 return new WebDriverElementImpl(driver, element.findElement(By.xpath("parent::*")));
98 }
99
100
101
102
103
104
105 public String getTextContent() {
106 return element.getText();
107 }
108
109
110
111
112
113
114 public IElement getElement(String xpath) {
115 return new WebDriverElementImpl(driver, (WebElement) element.findElement(By.xpath(xpath)));
116 }
117
118
119
120
121
122
123 public List<IElement> getElements(String xpath) {
124 List<IElement> elements = new ArrayList<IElement>();
125 for (WebElement o : element.findElements(By.xpath(xpath))) {
126 elements.add(new WebDriverElementImpl(driver, o));
127 }
128 return elements;
129 }
130
131 public String toString() {
132 return "IElement[name=" + getName() + " wrapped=" + element + "]";
133 }
134
135
136
137
138
139
140 public void setAttribute(String name) {
141 ((JavascriptExecutor) driver).executeScript("return arguments[0].setAttribute(arguments[1], true);", element, name);
142 }
143
144
145
146
147
148
149 public void setAttribute(String name, String value) {
150 if ("value".equals(name) && "input".equals(element.getTagName())) {
151
152 element.sendKeys(value);
153 } else {
154 ((JavascriptExecutor) driver).executeScript("return arguments[0].setAttribute(arguments[1], arguments[2]);", element, name, value);
155 }
156 }
157
158
159
160
161
162
163 public void setTextContent(String value) {
164 if (element.getTagName().equals("textarea")) {
165 element.clear();
166 element.sendKeys(value);
167 } else {
168 ((JavascriptExecutor) driver).executeScript(
169 "var parent = arguments[0];" +
170 "var children = parent.childNodes;" +
171 "for (i=0; i< children.length; i++) {" +
172 " parent.removeChild(children[i]);" +
173 "}" +
174 "parent.appendChild(document.createTextNode(arguments[1]));"
175 , element, value);
176 }
177 }
178
179 @Override
180 public int hashCode() {
181 final int prime = 37;
182 int result = 1;
183 result = prime * result + ((element == null) ? 0 : element.hashCode());
184 return result;
185 }
186
187 @Override
188 public boolean equals(Object obj) {
189 if (this == obj)
190 return true;
191 if (obj == null)
192 return false;
193 if (getClass() != obj.getClass())
194 return false;
195 final WebDriverElementImpl other = (WebDriverElementImpl) obj;
196 if (element == null) {
197 if (other.element != null)
198 return false;
199 }
200 else if (!element.equals(other.element))
201 return false;
202 return true;
203 }
204
205
206
207
208
209
210 public WebElement getHtmlElement() {
211 return element;
212 }
213
214 }