chromedriver.switchTo()。frame(webview)在测试chrome应用程序时崩溃

时间:2015-07-24 03:54:05

标签: selenium webview google-chrome-app selenium-chromedriver

我有一个Chrome应用程序,其中有一个webview。要运行功能测试,我需要点击此网页视图中的元素,但driver.switchTo().frame(webview)崩溃,异常org.openqa.selenium.NoSuchFrameException

示例代码:

System.setProperty("webdriver.chrome.driver", "/home/janindua/Software/chromeDriver/chromedriver");

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/home/janindua/workspace/discovery-ui/scraper2/build/target/scraper.crx"));
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
driver.get("chrome-extension://monoimhdfegpapbgppdmjfdgjdbkpboi/window.html");
driver.navigate().refresh();
driver.findElement(By.id("weburl-txtbox")).sendKeys("http://google.com/");
driver.findElementById("weburl-btn").click();
Thread.sleep(10000);
WebElement we = driver.findElementById("webv");
driver.switchTo().frame(we);

window html:                                                           

堆栈追踪:

Exception in thread "main" org.openqa.selenium.NoSuchFrameException: no such frame: element is not a frame
(Session info: chrome=42.0.2311.135)
(Driver info: chromedriver=2.16.333243         
(0bfa1d3575fc1044244f21ddb82bf870944ef961),platform=Linux 3.13.0-24-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 9 milliseconds
Build info: version: '2.46.0', revision: '87c69e2', time: '2015-06-04   16:17:10'
System info: host: 'janindua', ip: '127.0.1.1', os.name: 'Linux',  os.arch: 'amd64', os.version: '3.13.0-24-generic', java.version: '1.7.0_80'
Session ID: 878af1ba4a28469360756d6f786f6510
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=LINUX, acceptSslCerts=true,  javascriptEnabled=true, browserName=chrome, chrome={userDataDir=/tmp/.com.google.Chrome.ZJ2D7R}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=42.0.2311.135, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, hasTouchScreen=false, applicationCacheEnabled=false, takesScreenshot=true}]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
at    org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:605)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.frame(RemoteWebDriver.java:895)
at Google.main(Google.java:26)

2 个答案:

答案 0 :(得分:1)

  

janindu的答案不再正确(Partialy)。

     

自2015年10月起,有一种正确的方法可以获取webview窗口句柄

如何:  我们需要通知驱动程序我们希望它处理webviews窗口处理程序 (chromeOptions& windowTypes是重要的部分)

它假设看起来像这样

capabilities: {
     'browserName': 'chrome',
     'chromeOptions': {
         'windowTypes': ['webview']
     }
},

之后,您可以通常的方式获取窗口处理程序,

browser.getAllWindowHandles()

答案 1 :(得分:0)

现在这是一个已知错误,报告为Issue 960

如果您的Chrome应用使用网页视图加载网页并且您想要运行一些自动脚本,则chromedriver不提供访问网页视图中加载的网页中元素的方法。

chromedriver.switchTo().frame(webview)chromedriver.switchTo().window(webview)方法都会抛出异常,因为webview不是任何一种方法的可接受输入。