This Automation has proven to be a pleasantly nice challenge to solve! Sharing purely from the point of view of Learning!
If someone shares my interest for 3D printing, I recommend that you try automating the Cura Slicer Software. For the uninitiated, a slicer software converts 3d model files into numeric co-ordinates for a 3D printer to consume and print out a physical model. I’m slicing a large number of models that are being printed across 4 of my 3D printers. It’s become really painful to slice the models manually and therefore I decided to have my Robot do it.
I was pleasantly surprised at the number of challenges this simple interface threw in my path. It kind of compels you to explore and use different techniques to arrive at the solutions!
From a value engineering perspective, this is a great exercise in automation!
The interface has UI elements whose names are duplicated like the “Prepare” elements in the Interface below. UiPath Explorer does not know the difference between the Prepare tab on the top-left and the Prepare button on the bottom-right unless it uses the idx value!
Added to that, the name of the UiElement is its value and this does not give us much to work with even when using UiPath Explorer because if the values keep changing, the control names keep changing as well.
Similarly, there is no sure fire way to confirm that a model is loaded into the interface unless the model dimensions are visible on the bottom right. Again, because these controls don’t have fixed names, things like Enhanced RegEx selectors come to mind to get at the model dimensions and confirm that the model has indeed been loaded!
The UI has duplicated Hotkey combinations (which I guess is a bug) that makes it difficult to open child interfaces such as the Print dialog. Check this out below - ALT+s and then p takes me to Profiles, and never to Printer !
Which brings us to the Printer Settings Dialog below. None of the UI Elements in the target Black Box have a fixed control name.
A couple of solutions, such as targeted screen scraping of the boxed area, followed by Regular Expressions to extract the required information run across your mind
And there is Find Relative Element activity that helped me solve this problem
The Cura interface has multiple child windows. Extracting Machine settings for the currently active printer is a good exercise for using Anchor Base Activity.
And why do I need this?
- The Robot compares the machine settings with the model dimensions (from above) and if the latter doesn’t fit on the machine, then it will conclude that the model is too large for the current printer!
- The Robot can then switch to another printer until it finds the right one suitable for the model
- This code will become universal regardless of how many printers I add to my slicer!
Finally, the Close Window selectors for first & second child windows appear to validate during development. This is a kind of tease because they don’t work when the automation is actually run. Using UiPath Explorer helps resolve this issue.
I’m happy that this opportunity came my way. It’s a welcome change to automate something quirky once in a while!