tag:blogger.com,1999:blog-2532302763215844416.post7862663438245435026..comments2024-03-27T04:40:56.567+00:00Comments on Test Automation from inside: Cucumber JVM: Advanced Reporting 3. Handling FileNotFound or Invalid JSON ErrorsMykola Kolisnykhttp://www.blogger.com/profile/08484354844163560278noreply@blogger.comBlogger39125tag:blogger.com,1999:blog-2532302763215844416.post-6068897189293848652017-11-20T08:32:19.994+00:002017-11-20T08:32:19.994+00:00Can you please give an example to get the known er...Can you please give an example to get the known errors in the overview report bases on the tags?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-15810198482724844532017-08-25T06:27:05.360+01:002017-08-25T06:27:05.360+01:00Hi Nickolay,
Thanks for your help its working now....Hi Nickolay,<br />Thanks for your help its working now. I do have one more question, is there any way i can add data in report:<br />Like I have following Step in java class:-<br /> @Then("^(.+) validateEqual (.+)$")<br /> public void validateEqual(String gwmlColName, String smartColName) throws Throwable {<br /> for (Map.Entry> value : comparisonResultMap.entrySet()) {<br /> Map resultMap = value.getValue();<br /> String gwmlColValue = resultMap.get(gwmlColName);<br /> String smartColValue = resultMap.get(smartColName);<br /> try{<br /> assertEquals(gwmlColValue,smartColValue);<br /> }catch(Throwable e){<br /> System.out.println(" Caught Exception ");<br /> throw new PendingException(e.getMessage());<br /> }<br /> }<br /> }<br />As you can i am running same step in loop and i want to populate data (gwmlColValue ,smartColValue ) in report under this step. Is there some way this can be achived in Cucumber.<br />Any help is greatly appreciated.<br />Regards,<br />Vikram PathaniaAnonymoushttps://www.blogger.com/profile/10844374800995662194noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-68769671438855186602017-08-22T08:48:10.303+01:002017-08-22T08:48:10.303+01:00You will not find this class there because you inc...You will not find this class there because you include wrong dependency. Try to include <b>cucumber-report-runner</b> instead of <b>cucumber-report-generator</b>Mykola Kolisnykhttps://www.blogger.com/profile/08484354844163560278noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-11388977120704797562017-08-22T04:48:21.892+01:002017-08-22T04:48:21.892+01:00Hi,
i am using following settings:
build.gradle
te...Hi,<br />i am using following settings:<br />build.gradle<br />testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.5.4.RELEASE'<br /> compile group: 'net.sf.supercsv', name: 'super-csv', version: '2.4.0'<br /> compile group: 'info.cukes', name: 'cucumber-java', version: '1.2.5'<br /> compile group: 'info.cukes', name: 'cucumber-core', version: '1.2.5'<br /> compile group: 'info.cukes', name: 'gherkin', version: '2.12.2'<br /> testCompile group: 'org.slf4j', name: 'slf4j-simple', version: '1.6.1'<br /> testCompile group: 'info.cukes', name: 'cucumber-spring', version: '1.2.5'<br /> testCompile group: 'info.cukes', name: 'cucumber-junit', version: '1.2.5'<br /> compile group: 'com.github.mkolisnyk', name: 'cucumber-report-generator', version: '1.0.11'<br />}<br /><br />and <br />package cucumberJava.runners;<br /><br />import com.github.mkolisnyk.cucumber.runner.ExtendedCucumberOptions;<br /><br />import cucumber.api.CucumberOptions;<br />import cucumber.api.junit.Cucumber;<br />import org.junit.runner.RunWith;<br /><br />/**<br /> * The JUnit runner uses the JUnit framework to run the Cucumber Test.<br /> * All we need is to create a single empty class with an annotation @RunWith(Cucumber.class<br /> * Created by vpathani on 14/08/2017.<br /> */<br /><br />@RunWith(ExtendedCucumber.class)<br />@ExtendedCucumberOptions(jsonReport = "target/cucumber.json",<br /> retryCount = 3,<br /> detailedReport = true,<br /> detailedAggregatedReport = true,<br /> overviewReport = false,<br /> toPDF = false,<br /> outputFolder = "target")<br />@CucumberOptions(<br /> format = {"pretty"},<br /> tags = {"@passed"},<br /> glue = "cucumberJava.steps" ,<br /> features = "src/test/resources/cucumber",<br /> plugin = { "html:target/cucumber-html-report",<br /> "json:target/cucumber.json", "pretty:target/cucumber-pretty.txt",<br /> "usage:target/cucumber-usage.json", "junit:target/cucumber-results.xml" }<br />)<br />public class RunGwMLCompareTests {<br /><br />}<br />but i not able to find extendedRunner class any help.<br />Anonymoushttps://www.blogger.com/profile/10844374800995662194noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-44061768196479072732017-06-27T13:13:38.071+01:002017-06-27T13:13:38.071+01:00For TestNG that can be done in 2 steps:
1) each r...For TestNG that can be done in 2 steps:<br /><br />1) each runner class performs output to different JSON file. Thus no output files would be overridden<br /><br />2) There should be method which is called after entire test suite ends (TestNG should have such support). In this method you can generate reports using API. E.g. for the detailed report it looks like this:<br /><br /> CucumberDetailedResults results = new CucumberDetailedResults();<br /> results.setOutputDirectory("target/");<br /> results.setOutputName("cucumber-results");<br /> results.setSourceFiles(new String[] {<br /> "./src/test/resources/cucumber.json",<br /> "./src/test/resources/cucumber-2.json"<br /> });<br /> results.setScreenShotWidth("300px");<br /> results.execute(true, true);<br /><br />Pay attention to the <b>setSourceFiles</b> method. It accepts array of paths to multiple JSON files. This way you can combine multiple outputs and report them in a single file.Mykola Kolisnykhttps://www.blogger.com/profile/08484354844163560278noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-36703732363736158172017-06-27T12:50:43.823+01:002017-06-27T12:50:43.823+01:00Hello Nickolay,
Thanks for such a great tutorial....Hello Nickolay,<br /><br />Thanks for such a great tutorial.<br /><br />I am facing an issue -<br />In my framework we have 20 feature files and each file has a runner file which will be running in parallel using maven sure fire plugin.<br /><br />However the problem I am facing is I have give cucumber.json in each of the runner file and expecting that I will have a one consolidated json file while will be used for report generation.<br /><br />But when ever the scenarios are running they are overwriting the json file. And in the end I just have report foe the last feature file executed.<br /><br />Is there any way the results in json file can be concatenated to the previous scenario results after the scenario execution.<br /><br />Please help me.<br /><br />Thanks,<br />Sundeep Anonymoushttps://www.blogger.com/profile/18407634407387987064noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-22060242441877741362016-11-17T14:29:34.368+00:002016-11-17T14:29:34.368+00:00If you use the ExtendedCucumberRunner you no longe...If you use the ExtendedCucumberRunner you no longer need to write the code generating report explicitly. Extended runner already has it. The only thing you should care about is references to proper JSON file. Look at the sample code in this post (the last example).Mykola Kolisnykhttps://www.blogger.com/profile/08484354844163560278noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-36796477070843924182016-11-17T14:21:34.121+00:002016-11-17T14:21:34.121+00:00I tried using ExtendedCucumberRunner. But didn'...I tried using ExtendedCucumberRunner. But didn't resolve that Invalid JSON issue.Anonymoushttps://www.blogger.com/profile/10518118820209552821noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-68659145284620137752016-11-17T13:00:16.704+00:002016-11-17T13:00:16.704+00:00That's interesting. I still recommend using Ex...That's interesting. I still recommend using ExtendedCucumberRunner but this definitely looks like some quick alternativeMykola Kolisnykhttps://www.blogger.com/profile/08484354844163560278noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-48029343130418633072016-11-17T05:12:30.676+00:002016-11-17T05:12:30.676+00:00The issue "Input is invalid JSON; does not st...The issue "Input is invalid JSON; does not start with '{' or '[', c=-1" can be resolved by having the following code snippet in @AfterClass Junit method in the cucumber runner file. <br /><br />Runtime.getRuntime().addShutdownHook(new Thread() {<br />@Override<br />public void run() {<br /><br />String sourcePath = System.getProperty("user.dir") + File.separator + "//target//cucumber.json";<br /><br />CucumberDetailedResults pdfResult = new CucumberDetailedResults();<br /> pdfResult.setOutputDirectory(System.getProperty("user.dir") + File.separator + "target//");<br /> pdfResult.setOutputName(new SimpleDateFormat("MM_dd_yyyy").format(new Date(System.currentTimeMillis())));<br /> pdfResult.setSourceFile(sourcePath);<br /><br />try {<br /><br /> pdfResult.execute(true,true);<br /><br />} catch (Exception e) {<br /> <br />e.printStackTrace();<br /> <br />}<br /> <br />}<br /><br />Note:<br />Make sure that @Before in Hooks.java does not generate the report.<br /><br />-ThanksAnonymoushttps://www.blogger.com/profile/10518118820209552821noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-76028378940009952882016-10-27T14:30:38.472+01:002016-10-27T14:30:38.472+01:00You are getting exactly the same error as this pos...You are getting exactly the same error as this post describes about. So, the answer to your question (where to put this code fragment) is: nowhere. Use <a href="http://mkolisnyk.github.io/cucumber-reports/extended-cucumber-runner" rel="nofollow">Extended Cucumber Runner</a>. It's a wrapper on standard Cucumber-JVM runner with some additions related to reporting in particular. So, read this post and the link I gave to see examples.Mykola Kolisnykhttps://www.blogger.com/profile/08484354844163560278noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-83925546626612981492016-10-27T14:14:26.562+01:002016-10-27T14:14:26.562+01:00Hi Nickolay,
I am getting
org.apache.maven.rep...Hi Nickolay, <br /><br />I am getting <br /><br />org.apache.maven.reporting.MavenReportException: Error occured while generating Cucumber usage report<br /> at com.github.mkolisnyk.cucumber.reporting.CucumberUsageReporting.executeReport(CucumberUsageReporting.java:385)<br /> at com.khurana.Test.Test1.tearDown(Test1.java:70)<br /> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br /> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)<br /> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)<br /> at java.lang.reflect.Method.invoke(Unknown Source)<br /> at cucumber.runtime.Utils$1.call(Utils.java:40)<br /> at cucumber.runtime.Timeout.timeout(Timeout.java:16)<br /> at cucumber.runtime.Utils.invoke(Utils.java:34)<br /> at cucumber.runtime.java.JavaHookDefinition.execute(JavaHookDefinition.java:60)<br /> at cucumber.runtime.Runtime.runHookIfTagsMatch(Runtime.java:224)<br /> at cucumber.runtime.Runtime.runHooks(Runtime.java:212)<br /> at cucumber.runtime.Runtime.runAfterHooks(Runtime.java:206)<br /> at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:46)<br /> at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:102)<br /> at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)<br /> at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)<br /> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)<br /> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)<br /> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)<br /> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)<br /> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)<br /> at org.junit.runners.ParentRunner.run(ParentRunner.java:363)<br /> at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)<br /> at cucumber.api.junit.Cucumber.runChild(Cucumber.java:95)<br /> at cucumber.api.junit.Cucumber.runChild(Cucumber.java:38)<br /> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)<br /> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)<br /> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)<br /> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)<br /> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)<br /> at org.junit.runners.ParentRunner.run(ParentRunner.java:363)<br /> at cucumber.api.junit.Cucumber.run(Cucumber.java:100)<br /> at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)<br /> at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)<br /> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)<br /> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)<br /> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)<br /> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)<br />Caused by: java.io.IOException: Input is invalid JSON; does not start with '{' or '[', c=-1<br /> at com.cedarsoftware.util.io.JsonReader.readJsonObject(JsonReader.java:1494)<br /> at com.cedarsoftware.util.io.JsonReader.readObject(JsonReader.java:707)<br /> at com.github.mkolisnyk.cucumber.reporting.CucumberUsageReporting.getStepSources(CucumberUsageReporting.java:340)<br /> at com.github.mkolisnyk.cucumber.reporting.CucumberUsageReporting.executeReport(CucumberUsageReporting.java:366)<br /> ... 38 more<br /><br />Also I want to know where should <br /><br /> CucumberUsageReporting report = new CucumberUsageReporting();<br /> report.setOutputDirectory("target");<br /> report.setJsonUsageFile("target/cucumber-report.json");<br /> report.executeReport();<br /> be put?nikhilhttps://www.blogger.com/profile/04379549860257705989noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-23705664895392190912016-09-22T23:43:38.769+01:002016-09-22T23:43:38.769+01:00There may be multiple reasons. I'd suggest fir...There may be multiple reasons. I'd suggest firstly to make sure that ExtendedCucumberOptions refers to the same JSON file as defined by standard CucumberOptions.<br /><br />After that make sure you have flag <b>overviewReport = true</b> set in ExtendedCucumberOptions. If you don't have any of the reporting flags set to true we should hardly expect that anything would ever be generated.<br /><br />Another checkpoint is the actual path where reports are generated to. This folder should exist. Also, since the path is relative, make sure that you run tests from the folder you actually expect to be the root folder.<br /><br />Additionally, try to refresh folder content. Maybe reports aren't seen just because folder content wasn't refreshed in IDE or whatever you browse content byMykola Kolisnykhttps://www.blogger.com/profile/08484354844163560278noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-13897440591561768352016-09-22T21:13:35.848+01:002016-09-22T21:13:35.848+01:00Hi Nickolay, I am using cucumber with TestNg. I am...Hi Nickolay, I am using cucumber with TestNg. I am using ExtendedCucumberOptions as advised above for the overall report and added all the necessary jars. I have given the destination as target. I am not able to see any of the reports in the target and there is no issue reported while running the test related to reports. Please advise on how to go about it. Thanks in advanceRamhttps://www.blogger.com/profile/04121222930806385372noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-91164715060008395372016-09-14T12:42:40.685+01:002016-09-14T12:42:40.685+01:00Hi Venkata,
You checked just one potential reason...Hi Venkata,<br /><br />You checked just one potential reason of the error but you didn't check another one which is: <b>Report generation is called before the source report is generated</b>. And this is very likely the case. <br /><br />Solution: You can read about it exactly in this post you commented for. Just find the heading <b>Use extended Cucumber reporting functionality</b> with some sample codeMykola Kolisnykhttps://www.blogger.com/profile/08484354844163560278noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-73739409595363717792016-09-14T12:24:32.613+01:002016-09-14T12:24:32.613+01:00Hi Nickolay Kolesnik,
I am getting below the erro...Hi Nickolay Kolesnik,<br /><br />I am getting below the error, though i have targeted the Report generation location to correct report location. Please find below the piece of code<br />IOException: Input is invalid JSON; does not start with '{' or '[', c=-1 at ... readJsonObject(JsonReader.java:1494)<br /><br />@CucumberOptions(<br /> strict = false,<br /> features = "src/test/resources/feature/",<br /> glue={"com.telstra.selenium"},<br /> dryRun=false,<br /> tags={"@Sanity"},<br /> monochrome=true, <br /> plugin = {"html:target/cucumber","json:target/cucumber.json", "pretty:target/cucumber-pretty.txt",<br /> "usage:target/cucumber-usage.json", "junit:target/cucumber-results.xml"}<br /> )<br /><br /><br /> CucumberResultsOverview results = new CucumberResultsOverview();<br /> results.setOutputDirectory("target");<br /> results.setOutputName("target/cucumber-results"); <br /> results.setSourceFile("target/cucumber.json");<br /> results.executeFeaturesOverviewReport();<br /><br />And, <br />POM.xml file:<br /><br /><br /> cucumber-jvm-example<br /> ${project.build.directory}/site/cucumber-reports<br /> ${project.build.directory}/cucumber.json<br /> true<br /> false<br /> 42<br />Anonymoushttps://www.blogger.com/profile/03771554280162120082noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-88167414832749446792016-05-26T12:35:44.400+01:002016-05-26T12:35:44.400+01:00The runner itself is simply another Unit runner. S...The runner itself is simply another Unit runner. So, in Ant it can be triggered the same way as any other Unit tests. The biggest difficulty is that you need to include cucumber-reports library Jar with all dependencies unless there's some way to resolve remote dependencies from AntMykola Kolisnykhttps://www.blogger.com/profile/08484354844163560278noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-69911142276451772602016-05-26T12:31:37.811+01:002016-05-26T12:31:37.811+01:00Hi Nicolay
Can this be done as part of an ant bui...Hi Nicolay<br /><br />Can this be done as part of an ant build process? if so could you give me some pointers to how I can do this? in the meantime i'll keep trying<br /><br />Cheers<br /><br />RichAnonymoushttps://www.blogger.com/profile/06673783437270560612noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-26205711823974711842016-04-15T19:30:24.839+01:002016-04-15T19:30:24.839+01:00Is there any way this can be used with Cucumber we...Is there any way this can be used with Cucumber weld?<br />I.e:<br /> <br /> info.cukes<br /> cucumber-weld<br /> 1.2.4<br /> test<br /> Anonymoushttps://www.blogger.com/profile/04496820659240195782noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-48452426356702130642016-03-18T19:30:16.192+00:002016-03-18T19:30:16.192+00:00I want to understand the known errors report bette...I want to understand the known errors report better. Is the idea to supply a list of failing scenarios names and what? highlight them in the report differently?Anonymoushttps://www.blogger.com/profile/15118636644048825667noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-7318048417439234842016-02-13T00:52:39.714+00:002016-02-13T00:52:39.714+00:00OK. Thank you. I'll work on itOK. Thank you. I'll work on itMykola Kolisnykhttps://www.blogger.com/profile/08484354844163560278noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-24392599024227026682016-02-12T19:28:34.243+00:002016-02-12T19:28:34.243+00:00Here https://github.com/mkolisnyk/cucumber-reports...Here https://github.com/mkolisnyk/cucumber-reports/issues/63, is created the issueAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-3746085292156451422016-02-12T19:18:30.284+00:002016-02-12T19:18:30.284+00:00Here https://github.com/mkolisnyk/cucumber-reports...Here https://github.com/mkolisnyk/cucumber-reports/issues/62, is a created issueAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-58602342917207270082016-02-12T16:06:15.206+00:002016-02-12T16:06:15.206+00:00OK. As I can see I'm using the same version of...OK. As I can see I'm using the same version of JUnit and Cucumber libraries. BTW, the cucumber-reports library now has the latest version of 1.0.1, so just in case, make sure you updated it.<br />As for unrooted tests node, that can be resulted by improper CucumberOptions settings or improperly formatted feature file. But I could take a closer look at it if I had a chance to see the feature file and JUnit test class. If any you can create a new issue in the GitHub project. Here is the link: https://github.com/mkolisnyk/cucumber-reports/issues<br /> Mykola Kolisnykhttps://www.blogger.com/profile/08484354844163560278noreply@blogger.comtag:blogger.com,1999:blog-2532302763215844416.post-75492424105891974762016-02-12T13:43:25.186+00:002016-02-12T13:43:25.186+00:00They are the dependencies that I used
maven...They are the dependencies that I used<br /><br /><br /> maven-compiler-plugin<br /> 3.1<br /> <br /> 1.8<br /> 1.8<br /> <br /> <br /> <br /> <br /> <br /> <br /> net.sourceforge.cobertura<br /> cobertura<br /> 2.1.1<br /> <br /> <br /> info.cukes<br /> cucumber-android<br /> 1.2.0<br /> <br /> <br /> info.cukes<br /> cucumber-core<br /> 1.2.4<br /> <br /> <br /> info.cukes<br /> cucumber-html<br /> 0.2.3<br /> <br /> <br /> info.cukes<br /> cucumber-java<br /> 1.2.4<br /> <br /> <br /> info.cukes<br /> cucumber-junit<br /> 1.2.4<br /> <br /> <br /> info.cukes<br /> cucumber-jvm-deps<br /> 1.0.5<br /> <br /> <br /> info.cukes<br /> cucumber-picocontainer<br /> 1.2.4<br /> <br /> <br /> org.uniknow.agiledev<br /> cucumber-reporting<br /> 0.1.8<br /> <br /> <br /> info.cukes<br /> gherkin<br /> 2.12.2<br /> <br /> <br /> junit<br /> junit<br /> 4.12<br /> <br /> <br /> org.mockito<br /> mockito-all<br /> 1.10.19<br /> <br /> <br /> org.picocontainer<br /> picocontainer<br /> 2.2<br /> <br /> <br /> io.appium<br /> java-client<br /> 3.2.0<br /> <br /> <br /> org.seleniumhq.selenium<br /> selenium-java<br /> 2.47.1<br /> <br /> <br /> log4j<br /> log4j<br /> 1.2.17<br /> <br /> <br /> postgresql<br /> postgresql<br /> 9.1-901-1.jdbc4<br /> <br /> <br /> com.oracle<br /> ojdbc14<br /> 10.2.0.4.0<br /> <br /> <br /> com.github.mkolisnyk<br /> cucumber-reports<br /> 0.0.11<br /> <br /> <br /> com.sun<br /> tools<br /> 1.6<br /> system<br /> C:\Program Files\Java\jdk1.8.0_60\lib\tools.jar<br /> <br /> <br />Anonymousnoreply@blogger.com