# Best practices
When working with Virtuoso, it is important to have an understanding of Virtuoso's architecture and how it works in the background. In this section we briefly describe Virtuoso's internal concepts and provide details on how this might affect you or your application.
# Virtuoso's internals
Virtuoso has a distributed multi-tenant architecture to enable horizontal scaling in the cloud. An essential part of this distributed network is Virtuoso's bot cluster. Bots enable Virtuoso to quickly (in parallel) explore applications and execute tests.
Make sure your application can handle parallel requests
When your application is being explored, many bots may start browsing your web application in parallel.
Although for most applications we've tested this is not a problem, it is your responsibility to make sure your webserver can handle a large number of parallel requests.
It is typical of firewalls and rate-limiters to consider many parallel requests from same/similar sources to be a potential Denial-of-Service(DoS) attack.
Virtuoso is cloud-based and performs smart dynamic scaling in the background to match resources and demand. Given that this process is done using intelligent adaptive algorithms, explorations/executions may be processed with different capacities at different times of day, and so, the processing duration may vary as we dynamically scale our cloud.
For example, if an organization starts multiple further explorations on different projects at the same time, these projects will use the existing resources available to that organization, and can significantly impact not only those explorations but also smaller executions.
# Application considerations
In software engineering, Software testability plays a significant role in the effectiveness and efficiency of software testing efforts. This is the case for Virtuoso as well. If your application relies on many non-standard features and does not follow best practices in web development, this may also affect the quality of testing with Virtuoso.
Scroll jacking, sticky/fixed elements
Non-standard behaviour such as overriding browsers' native scrolling behaviour or placing fixed elements on the browser viewport can negatively influence Virtuoso's exploration.
# Whole-application explorations
One option available to Virtuoso users is to fully explore your application under test. This means that Virtuoso will recursively explore all pages of your application until no more pages are left to be explored. While this may be useful, it comes at a significant cost, and may take a long time to complete.
Beware of whole-application explorations
Exploring an application fully requires exploring every possible journey on the application. This can involve thousands of page, and incurs a significant costs.
# Dealing with iframes
When interacting with elements inside iframes, you may face challenges, such as: jumping inside and outside of an iframe, page navigations inside iframes, element highlights being mispositioned, etc.
As a best practice, we recommend that you:
- Make sure you first
switchto the iframe;
- If you face problems with making more interactions, first
switch to parent frame, and then switch back into the iframe;
- On Safari browser, this back and forth switching is required after each interaction against an iframe, since the browser loses the iframe handle once it navigates to a different page;
- If an element you were looking for does not seem to be visible to Virtuoso, note that it might be inside a nested iframe, or on a different iframe -- use DevTools to investigate this further;
- If the element highlighted on your screenshot is misaligned, increase the height of your goal, such that your iframe fits within the page.
When highlighting elements inside iframes, Virtuoso will intelligently auto-correct the position of the elements relative to the browser window. However, this is only available in the execution screenshot view, and the following features may show an incorrect element positioning:
- Healed element screenshot;
- Root cause analysis screenshot;
- One-click to fix element support;
- Element screenshot in the timeline tab.