Hi Saneth, I fixed the issue by temporary displaying the HTML form using JavascriptExecutor. Thanks for the reference :)
Regards, *Lasantha Samarakoon* | Software Engineer WSO2, Inc. #20, Palm Grove, Colombo 03, Sri Lanka Mobile: +94 (71) 214 1576 Email: [email protected] Web: www.wso2.com lean . enterprise . middleware On Fri, Oct 9, 2015 at 12:40 PM, Saneth Dharmakeerthi <[email protected]> wrote: > HI Lasantha, > > I think you can get some input form Dev mail thread "Unable to automate a > UI test case with Selenium for a file uploading in Jaggery" > > Thanks and Best Regards, > > Saneth Dharmakeerthi > Senior Software Engineer > WSO2, Inc. > Mobile: +94772325511 > > On Fri, Oct 9, 2015 at 11:54 AM, Lasantha Samarakoon <[email protected]> > wrote: > >> Hi all, >> >> I am working in Selenium based UI automation testing for the UES. In the >> scenario which I am working on, I need to upload an image when I click on a >> button. The code for the functionality as follows. >> >> *HTML:* >> >> >> <!-- this entire form is hidden --><form method="post" >> id="ues-dashboard-upload-banner-form" action="/path/to/form" class="hidden"> >> <input type="file" id="file-banner" name="banner" accept="image/*" /> >> ...</form> >> <div class="ues-banner-placeholder"> >> <button type="button" id="btn-edit-banner" class="btn >> btn-primary">Edit</button> >> ... >> </div> >> >> >> *Javascript:* >> >> (function() { >> var initBanner = function() { >> >> // clicking the edit button will trigger the click event of the >> input[type=file] field and opens the file browser >> $('.ues-banner-placeholder').on('click', '#btn-edit-banner', >> function(e) { $('#file-banner').click(); >> }); >> // once the value of the input[type=file] field changed, do >> some processing >> document.getElementById('file-banner').addEventListener('change', function >> (e) { >> ... >> }); >> ... >> } >> >> initBanner(); >> ... >> })(); >> >> >> Here when I tried to automate the functionality using Selenium, seems >> like it cannot manipulate the file browser. Instead they are suggesting to >> inject the path of the file directly into the input[type=file] field as >> below. >> >> driver.findElement(By.id("file-banner")).sendKeys(Keys.DELETE); >> driver.findElement(By.id("file-banner")).sendKeys(pathToFile); >> >> >> But this works only when the form field is visible. While it is hidden, >> Selenium gives the following exception. >> >> org.openqa.selenium.ElementNotVisibleException: Element is not currently >> visible and so may not be interacted with >> Command duration or timeout: 30.07 seconds >> Build info: version: '2.43.0', revision: >> 'accb3003b9fb8f7cae30f9669b4c594a065396a6', time: '2014-09-09 22:22:51' >> System info: host: 'lasanthas-Latitude-E6540', 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: 4f035f7f-f554-4206-a94c-5b0f79d5d0a5 >> Driver info: org.openqa.selenium.firefox.FirefoxDriver >> Capabilities [{platform=LINUX, acceptSslCerts=true, >> javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, >> browserName=firefox, handlesAlerts=true, browserConnectionEnabled=true, >> webStorageEnabled=true, nativeEvents=false, rotatable=false, >> locationContextEnabled=true, applicationCacheEnabled=true, >> takesScreenshot=true, version=28.0}] >> 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:599) >> at >> org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268) >> at >> org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:89) >> at >> org.wso2.ues.ui.integration.test.dashboard.BannerTest.testCreateDashboard(BannerTest.java:190) >> at >> org.wso2.ues.ui.integration.test.dashboard.BannerTest.testRunner(BannerTest.java:94) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >> at java.lang.reflect.Method.invoke(Method.java:606) >> at >> org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) >> at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) >> at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) >> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) >> at >> org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) >> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) >> at org.testng.TestRunner.privateRun(TestRunner.java:767) >> at org.testng.TestRunner.run(TestRunner.java:617) >> at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) >> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) >> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) >> at org.testng.SuiteRunner.run(SuiteRunner.java:240) >> at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) >> at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) >> at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) >> at org.testng.TestNG.runSuitesLocally(TestNG.java:1149) >> at org.testng.TestNG.run(TestNG.java:1057) >> at >> org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:177) >> at >> org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:92) >> at >> org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:105) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >> at java.lang.reflect.Method.invoke(Method.java:606) >> at >> org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) >> at >> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) >> at >> org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) >> at >> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:103) >> at >> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74) >> >> Can anyone please advice me on a workaround for this? >> >> >> >> Thanks, >> >> *Lasantha Samarakoon* | Software Engineer >> WSO2, Inc. >> #20, Palm Grove, Colombo 03, Sri Lanka >> Mobile: +94 (71) 214 1576 >> Email: [email protected] >> Web: www.wso2.com >> >> lean . enterprise . middleware >> >> _______________________________________________ >> Dev mailing list >> [email protected] >> http://wso2.org/cgi-bin/mailman/listinfo/dev >> >> >
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
