|
42 | 42 | } |
43 | 43 | } |
44 | 44 |
|
| 45 | + function getXPath(node, path) { |
| 46 | + path = path || []; |
| 47 | + if(node.parentNode) { |
| 48 | + path = getXPath(node.parentNode, path); |
| 49 | + } |
| 50 | + |
| 51 | + if(node.previousSibling) { |
| 52 | + var count = 1; |
| 53 | + var sibling = node.previousSibling |
| 54 | + do { |
| 55 | + if(sibling.nodeType == 1 && sibling.nodeName == node.nodeName) {count++;} |
| 56 | + sibling = sibling.previousSibling; |
| 57 | + } while(sibling); |
| 58 | + if(count == 1) {count = null;} |
| 59 | + } else if(node.nextSibling) { |
| 60 | + var sibling = node.nextSibling; |
| 61 | + do { |
| 62 | + if(sibling.nodeType == 1 && sibling.nodeName == node.nodeName) { |
| 63 | + var count = 1; |
| 64 | + sibling = null; |
| 65 | + } else { |
| 66 | + var count = null; |
| 67 | + sibling = sibling.previousSibling; |
| 68 | + } |
| 69 | + } while(sibling); |
| 70 | + } |
| 71 | + |
| 72 | + if(node.nodeType == 1) { |
| 73 | + path.push(node.nodeName.toLowerCase() + (node.id ? "[@id='"+node.id+"']" : count > 0 ? "["+count+"]" : '')); |
| 74 | + } |
| 75 | + return path; |
| 76 | + } |
| 77 | + |
45 | 78 | webdriver.WebDriver.prototype.visualizerGetSource = function() { |
46 | 79 | webdriver.http.Executor.COMMAND_MAP_['visualizerGetSource'] = { |
47 | 80 | method: 'GET', path: '/session/:sessionId/-cisco-visualizer_source'}; |
|
256 | 289 | } |
257 | 290 |
|
258 | 291 | WebDriverJsDemo.prototype.visualizerAssignEventHandlers = function() { |
| 292 | + var self = this; |
259 | 293 | var win = this.visualizationWin; |
260 | 294 |
|
261 | 295 | win.document.onkeypress = function(event) { |
262 | 296 | var key = String.fromCharCode(event.charCode); |
263 | 297 |
|
264 | 298 | if (event.target.hasAttribute('elementId')) { |
265 | 299 | var elementId = event.target.getAttribute('elementId'); |
266 | | - var element = new webdriver.WebElement(wd.driver, elementId); |
| 300 | + var element = new webdriver.WebElement(self.driver, elementId); |
267 | 301 | element.sendKeys(key); |
268 | 302 | } else { |
269 | | - wd.driver.actions().sendKeys(key).perform(); |
| 303 | + self.driver.actions().sendKeys(key).perform(); |
270 | 304 | } |
271 | 305 |
|
272 | 306 | return true; |
|
279 | 313 |
|
280 | 314 | if (event.target.hasAttribute('elementId')) { |
281 | 315 | var elementId = event.target.getAttribute('elementId'); |
282 | | - var element = new webdriver.WebElement(wd.driver, elementId); |
| 316 | + var element = new webdriver.WebElement(self.driver, elementId); |
283 | 317 | element.sendKeys(key); |
284 | 318 | } else { |
285 | | - wd.driver.actions().sendKeys(key).perform(); |
| 319 | + self.driver.actions().sendKeys(key).perform(); |
286 | 320 | } |
287 | 321 |
|
288 | 322 | return true; |
|
291 | 325 | win.document.onclick = function(event) { |
292 | 326 | if (event.target.hasAttribute('elementId')) { |
293 | 327 | var elementId = event.target.getAttribute('elementId'); |
294 | | - var element = new webdriver.WebElement(wd.driver, elementId); |
| 328 | + var element = new webdriver.WebElement(self.driver, elementId); |
295 | 329 | element.click(); |
296 | 330 | return false; |
297 | 331 | } |
298 | 332 |
|
299 | | - //wd.driver.findElement(event.target).click(); |
300 | | - //wd.driver.actions().click(event.target).perform(); |
301 | | - var hostSize = {width: win.innerWidth, height: win.innerHeight}; |
302 | | - |
303 | | - wd.driver.manage().window().getSize().then(function(targetSize) { |
304 | | - var targetDoc = wd.driver.findElement(webdriver.By.xpath('/html')); |
305 | | - var x = Math.floor(event.clientX * targetSize.width / hostSize.width); |
306 | | - var y = Math.floor(event.clientY * targetSize.height / hostSize.height); |
307 | | - return wd.driver.actions(). |
308 | | - mouseMove(targetDoc, {x: x, y: y}). |
309 | | - click(event.button). |
310 | | - perform(); |
311 | | - }).then(function() { |
312 | | - return wd.driver.visualizerShowPoint(); |
| 333 | + var xpath = getXPath(event.target); |
| 334 | + xpath = '/' + xpath.join('/'); |
| 335 | + var target = self.driver.findElement(webdriver.By.xpath(xpath)); |
| 336 | + self.driver.actions(). |
| 337 | + mouseMove(target, {x: event.offsetX, y: event.offsetY}). |
| 338 | + click(event.button). |
| 339 | + perform(). |
| 340 | + then(function() { |
| 341 | + return self.driver.visualizerShowPoint(); |
313 | 342 | }).then(function() { |
314 | | -// wd.updateSource(); |
| 343 | +// self.updateSource(); |
315 | 344 | }); |
316 | 345 |
|
317 | 346 | return false; |
|
0 commit comments