It will be a ninth final for 2018 runners-up Germany on Sunday after they beat Netherlands 3-1 but Spain lost their grip on the trophy after an extra-time loss to France.
Germany overcame the loss of Paulina Krumbiegel to injury and saw off a strong challenge from the Netherlands, aided by a rash decision from goalkeeper Daphne van Domsalaar in gifting Melissa Kossler a 19th-minute goal.
The Dutch had otherwise matched their opponents in the first half and got on top after the interval, drawing level when Jill Baijings effort from outside the box crept past the keeper and in off the post.
But the Dutch pressed the self-destruct button a second time in conceding a clumsy penalty for a tug on Sheikiera Martinez, Marie Muller making no mistake from the spot.
Substitute Martinez then made sure when following up a shot from Nicole Anyomi that came back off the post.
Spain had not conceded a goal in the entire competition until France hit them with an extra-time treble, ending a run of making the last six finals.
Las Rojitas had got away with giving up a couple of chances to the French in normal time and Les Bleuettes passed up two great opportunities created by themselves late on in the 90 minutes.
The deadlock was eventually broken by Melvine Malard’s header in the 104th minute after which fellow sub, 15-year-old Vicki Becho, struck twice to seal victory and Athenea del Castillo replied in the final seconds.
Sunday’s final kicks off at 4pm at St Mirren FC, with tickets available here or on the gate and the game is live on BBC Red Button, BBC Sport website and uefa.tv.