I also just confirmed that trying to use the approach to access the other document Elemetn driectly in webdriver throws an exception indicating a switchto is needed because the dom is a different frame than the current one
Ignoring the syntactic differences, here is what I am doing:
WebElement objectTag = findElement(By.id("anobject"));
WebElement circle = (WebElement) ((JavascriptExecutor) driver)
.executeScript(
"return arguments[0].contentDocument.getElementById('circleId')",
objectTag);
assertThat(Integer.parseInt(circle.getAttribute("cx")), is(100));
This throws the following exception, meaning a sort of 'switchto' will be needed and I can't directly access this embedded document element. Alternatively, I will try using executeAsyncscript if it has any effect.
org.openqa.selenium.StaleElementReferenceException: Element belongs to a different frame than the current one - switch to its containing frame to use it
Command duration or timeout: 18 milliseconds
For documentation on this error, please visit:
http://seleniumhq.org/exceptions/stale_element_reference.htmlBuild info: version: '2.25.0', revision: '17482', time: '2012-07-18 22:18:01'
System info:
os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_21'
Driver info: driver.version: RemoteWebDriver
Session ID: f0a96365-ec86-4ab1-896b-968222caa753
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:188)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:498)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:244)
at org.openqa.selenium.remote.RemoteWebElement.getAttribute(RemoteWebElement.java:120)
at com.mathworks.test.tools.mwwebguitesttools.integration.TestSvgSupport.testSvgElementAccessInObjectTag(TestSvgSupport.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at com.mathworks.test.tools.mwwebguitesttools.junitextensions.BrowserSpecificRunner.runChild(BrowserSpecificRunner.java:137)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at com.mathworks.test.tools.mwwebguitesttools.junitextensions.BrowserRunBefores.evaluate(BrowserRunBefores.java:36)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:24)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Element belongs to a different frame than the current one - switch to its containing frame to use it
Build info: version: '2.25.0', revision: '17482', time: '2012-07-18 22:18:01'
System info:
os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_21'
Driver info: driver.version: unknown
at <anonymous class>.<anonymous method>(resource://fxdriver/modules/web_element_cache.js:5671)
at <anonymous class>.<anonymous method>(file:///C:/Users/auser/AppData/Local/Temp/anonymous7603687846920077736webdriver-profile/extensions/
fxdr...@googlecode.com/components/command_processor.js:5282)
at <anonymous class>.<anonymous method>(file:///C:/Users/auser/AppData/Local/Temp/anonymous7603687846920077736webdriver-profile/extensions/
fxdr...@googlecode.com/components/command_processor.js:9569)
at <anonymous class>.<anonymous method>(file:///C:/Users/auser/AppData/Local/Temp/anonymous7603687846920077736webdriver-profile/extensions/
fxdr...@googlecode.com/components/command_processor.js:10131)
at <anonymous class>.<anonymous method>(file:///C:/Users/auser/AppData/Local/Temp/anonymous7603687846920077736webdriver-profile/extensions/
fxdr...@googlecode.com/components/command_processor.js:10136)
at <anonymous class>.<anonymous method>(file:///C:/Users/auser/AppData/Local/Temp/anonymous7603687846920077736webdriver-profile/extensions/
fxdr...@googlecode.com/components/command_processor.js:10074)