A fifteen-year-old internal application. Table-based layout, nested frames, IDs like ctl00$ContentPlaceHolder1$GridView1$ctl03$btnDelete, no test attributes, and a development team of two who are busy.
This is where Selenium lives. It is chosen for exactly these applications, so handling them is a core senior skill for this tool rather than an edge case.
Generated IDs that change between builds.
ASP.NET WebForms, older JSF and similar frameworks generate IDs containing the control hierarchy. Add a panel and every ID beneath it changes.