Stop Skimming PDFs, Start Automating PDF Testing
On the surface, PDFs look simple, but testing them is a whole different story. Invoices, contracts, statements, compliance reports… they’re often the last thing that lands in a customer’s hands. That also means even the smallest issue, like a missing field or a misplaced decimal, can turn into something big. The challenge is that PDFs aren’t like web pages or apps where you can easily inspect elements. They’re containers packed with content, layout, images, and data from different systems. When you add in dynamic content that changes for every customer, formatting that has to stay perfect, and the regulatory risks in industries like finance or healthcare, you start to see why manual testing just doesn’t cut it. It’s slow, inconsistent, and doesn’t scale. This is where automation becomes essential. With automation, you can make sure data is always accurate, layouts stay consistent, and testing scales across thousands of documents without slowing down your team. Instead of spending hours opening PDFs by hand, QA can focus on higher-value work while still knowing that every report or statement going out the door is right. That’s exactly where TestComplete comes in. It’s built to handle the tough parts of PDF testing so you don’t have to. You can validate content down to the last character, run visual checks to keep layouts consistent, and plug it all straight into your CI/CD pipeline. The result is faster releases, fewer headaches, and a lot more confidence that the documents your customers see are exactly as they should be. Click on this link and check out a quick demo to see how TestComplete makes PDF testing easier and more reliable in action.Basic actions taking significantly longer when run as part of ADO pipeline
Our nightly CI/CD ADO pipeline runs tests on a dedicated VM solely for running these tests. We have ~140 tests which run over a period of 6-7 hours. When we execute tests as part of the release pipeline via ADO, the tests take on average 20% longer than they do when they are run manually via TestExecute on the exact same machine. Regardless of whether we run just 1 or all ~140 tests through the pipeline, the result is the same. The tests are executed using the tscon disconnection method to run headless, and the same script is run before the comparisons so it isn't related to that. Investigating further into the details, the execution time difference seems to come from extremely basic actions. An action that would take 1 second, can often take 15 seconds when the test is run as part of the pipeline. Some examples of these actions are: A click with no key pressed. Tested object: Aliases.Application.MainForm.buttonMenu.wItems.Item["Browse"].Items.Item["Search"] (Sys.Process("Application").WinFormsObject("MainForm").WinFormsObject("buttonMenu").wItems.Item["Browse"].Items.Item["Search"]) A click at point (10, 10) with no key pressed. '^[F4]' was sent as a keyboard input to the following window or control. Selecting values in combo boxes takes up to 7 seconds. Even just giving focus to Edge takes 10 seconds: 'The window got focus' -Tested object: Aliases.browser.BrowserWindow (Sys.Browser("edge").BrowserWindow(0)) I've tried searching the community for similar threads but have had no luck. Any suggestions or help would be greatly appreciated.68Views0likes2CommentsSilent install of Testexecute with credentials
So i have my VM hosting my agents and testexecute which is running my automated UI tests. Right now i use a script to install Testexecute using -SilentInstall -SLM. However i am still required to log to the VM after the install to manually enter the credentials of my account in order to use TE in my tests. This is rather inconvenient since the way my VM are structure, i could rollback to a checkpoint previous to the TE installation to perform certain maintenance on the VM and then reinstall TE. So i was hoping if there was a way to silently install TE and provide the credentials to use? Thank you.Solved82Views0likes2CommentsButton is recognized but is not clickable.
Hello everyone. I need your help to figure out why the button on my mobile app (Android) is not clicked even though TestComplete recognizes it. The code is very simple: if completeButton.Exists: Log.Message("The button exists") completeButton.Click() It returns "The button exists". However, the button is not clicked. I suspect that the issue is because the button is partly covered with home icon as the image shows. Please tell me your thought and advice to fix this error. Cheers.118Views0likes7CommentsCannot Open Sys Object Tree
Hello! I'm using testComplete for my application testing. In the object browser, Mobile and Sys are listed. I can open the Mobile object tree but cannot open the Sys object tree. More detail: I’m not able to get sys object tree, when I go with Object Spy > Highlight object in the object tree I receive message "cannot highlight this object in the object tree" but this object exists on the screen and when I use function 'Highlight object on the screen' it is highlighted. It happens to each object I tried (WPFobject such as buttons, cells). What I did: I updated the latest version of TestComplete(v 15.73.16), then sys object tree appeared. However, as I opened my file and start working, the object tree was not opened. Please give me any advice to solve this problem.134Views0likes2CommentsProjectSuite.Variables.Path is undefined in OnStartTestHandler
I would like the pjs path in the OnStartTestHandler event handler to prefix to a TestedApps application. When I run my test ProjectSuite.Variables.Path is undefined. Is there another way to get the pjs path in the OnStartTestHandler event handler? This is my javascript code function UpdateFilePath(testedApp, path) { let app; // Obtains the tested application's item app = TestedApps.Items(testedApp); Log.Message(`Start: ${app.Path} --- ${app.FileName}`); app.Path = ProjectSuite.Variables.Path + path; Log.Message(`End: ${app.Path} --- ${app.FileName}`); return app; }Solved45Views0likes1CommentHow To: Read data from the Windows Registry
Hello all, I have recently learned how to retrieve data from the Windows registry in JavaScript test units. I am using this to return the OS information and application path information. This is very useful when added to the EventControl_OnStartTest event code. This will allow you to return OS information and other needed data at each test run. Some test management systems may provide this information for you or it may be logged in the in data produced in a pipeline run. This will embed the information directly into your test log. SmartBear KB Links: Storages Object Storages Object Methods Storages.Registry Method Section Object Get SubSection Method This bit of code will return the Product Name and Current Build from the registry. This location may vary between OS's so you will want to check this with RegEdit. let Section = Storages.Registry("SOFTWARE\\Microsoft\\Windows NT", HKEY_LOCAL_MACHINE); let regKeyString = Section.GetSubSection("CurrentVersion").Name; let productIdString = Storages.Registry(regKeyString, HKEY_LOCAL_MACHINE, 1, true).GetOption("ProductName", ""); let currentBuildString = Storages.Registry(regKeyString, HKEY_LOCAL_MACHINE, 1, true).GetOption("CurrentBuild", ""); Log.Message("Windows Version: " + productIdString + " Build: " + currentBuildString ) I have also found the need to find and set an application path and work folder in the project TestedApp for running through a pipeline because the pipeline deploys the application to a non-standard path. let Section = Storages.Registry("SOFTWARE\\WOW6432Node\\<_yourSectionName>\\", HKEY_LOCAL_MACHINE); let regKey = Section.GetSubSection(<_yourSubSectionName>).Name; let Path = Storages.Registry(regKey, HKEY_LOCAL_MACHINE, 0, true).GetOption("", ""); let WorkFolder = Storages.Registry(regKey, HKEY_LOCAL_MACHINE, 0, true).GetOption("Path", ""); let appIndex = TestedApps.Find(<_yourAppName>); if (appIndex >= 0){ if(TestedApps.Items(<_yourAppName>).Path != Path){ TestedApps.Items(<_yourAppName>).Path = Path } if(TestedApps.Items(<_yourAppName>).WorkFolder != WorkFolder){ TestedApps.Items(<_yourAppName>).Params.ActiveParams.WorkFolder = WorkFolder; } } else{ Log.Error("TestedApp " + <_yourAppName> + " does not Exist.") Runner.Stop(true); } I hope you find these links and code examples as useful as I have! Have a great day!109Views0likes0CommentsName Mapping not working on remote browser
The name mapping and test cases work fine on local browsers, but would complain about page or object not found when running headless remote browsers and in parallel testing. I have the following setup for browser name mapping: For headless setup I have: server = "localhost" capabilities = { "browserName": "chrome", "headless" : "true", "screenResolution": "1920x1080", "platform" : "Headless", "record_video": "true" } Browsers.RemoteItem[server, capabilities].Run(url) Is this the correct way to work with name mapping on headless browser?1.1KViews0likes15CommentsTestexecute enters ` or ~ in textbox
When running tests sometimes TC or TE enters chars into a textbox, mostly this char: ` I've seen it enter ~ aswell Example : I can not find where this char comes from, it happens only sometimes and at different moments/tests Anyone have any ideas where this could come from? In this test because it entered a invalid number I get an error screen (from my software) and the tests goes to timeout which stops the entire rest of the project from being run.Solved1.2KViews0likes16Comments