I worked for about 9 years in one of the big banks, managing software testing teams.
We uses infosys and TCS quite a lot, about 75% of my teams were from there - either offshore (India), nearshore (Mexico), or onshore (US).
One of the reasons we used them was because they were flexible.
Our teams were dependent on what projects got funded and got put on our roadmap. So we could have a project that needed to be staffed up in a month, test for 3 or 4 months, then either dissipate or roll onto another project. They usually had good testers 'on the bench' to work on projects like that.
Over the course of my time there, I had anywhere from 18 to 50 people on my team. The flexibility was very necessary. It was much harder to make the case to hire full-time people because of the nature of how we handled projects. If we needed someone to be onshore, they got us someone onshore even if they had to move them here. Even though they took care of all of that overhead, a lot of my time was spent doing resource management.
Fast forward to today, and I have gotten out of the large corporate world. I have a small team of five and am hiring two more employees. Of the 17 resumes I have reviewed over the last few months, only a couple were not on some kind of work visa. Only 2 were men. I can't really explain it, I just know what resumes I have seen and information from the recruiter. Would I hire anyone not on a visa program? Absolutely! If they would apply and be qualified, I would love to hire them. But my perception is based on the reality of what I am seeing, and that is that the visa program is fine or actually needs more support. (but I also understand this is my situation and not everyone's)