World champions and favourites France got their Euro 2020 preparations off to a fine start with a 3-0 win over Wales, who played over an hour with 10 men in Nice.
In a frantic 10-minute period in the first half, Wales went down to 10 men after Neco Williams was harshly dismissed for a handball from Karim Benzema's shot, but Danny Ward denied the returning Benzema's spot-kick with a fine save (27).
France got their opener through Kylian Mbappe's rebounded effort from another Ward save (35), and Antoine Griezmann got the second with a brilliant curling strike from the edge of the box (48).
Benzema, desperate for a goal to mark his comeback to the squad after nearly six years out, hit the post late on, with sub Ousmane Dembele sliding home on the rebound (79) to wrap up the win.
Wales now host Albania in their final warm-up game on Saturday, before their Euro 2020 opener against Switzerland in Baku on June 12.
France take on Bulgaria in a friendly next Tuesday and then face Germany in Munich on June 15 in their opening group match.
- Match stats
- Euro 2020 squads - who's been selected?
- Euro 2020 hosts, dates, fixtures
- Wales' route through Euro 2020
France: Lloris (7), Pavard (7), Varane (6), Kimpembe (7), Hernandez (7), Tolisso (7), Pogba (8), Rabiot (7), Griezmann (8), Mbappe (7), Benzema (7)
Subs: Kounde (6), Digne (6), Coman (6), Sissoko (6), Dembele (7), Ben Yedder (NA)
Wales: Ward (8), Roberts (7), Mepham (7), Rodon (6), Gunter (7), N Williams (5), Allen (6), Morrell (6), Bale (6), James (7), Wilson (6)
Subs: Moore (7), Levitt (6), Ramsey (6), Davies (6), Brooks (5), Colwill (NA)
Man of the match: Danny Ward
How France sailed past Wales after harsh red
Wales were keen to play France in this warm-up game, seeing the world champions as setting with a similar high press to their first Euro 2020 opponents Switzerland.
Although Wales started with promise, France had most of the opportunities in the first half, gaining a numerical advantage in controversial circumstances.
After Ward had superbly clawed away Paul Pogba's header, Neco Williams blocked Benzema's rebound with his arm, prompting a VAR review. Portuguese referee Luis Godinho awarded the spot kick, before harshly sending Williams off, deeming the handball deliberate despite the Liverpool man being only half-a-yard away from Benzema's stop.
Benzema, who has been out of the France side for nearly six years after being embroiled in a blackmail scandal involving France team-mate Mathieu Valbuena, struck the penalty low to Ward's right, but the goalkeeper superbly tipped it away.
France did get their opener just eight minutes later, however, as Adrien Rabiot's low shot deflected off Griezmann, was saved by Ward's foot, but fell kindly to Mbappe to force the ball past the Wales goalkeeper.
France wasted no time in the second half, getting their second three minutes after the restart; Pogba's ball was flicked on by Mbappe for Griezmann, who curled a beauty into the top corner from the edge as Joe Rodon stood off him.
Robert Page brought on four players on the hour mark, introducing Aaron Ramsey, Ben Davies, Dylan Levitt and Kieffer Moore, resting the legs of Gareth Bale, Joe Allen, Chris Mepham and Harry Wilson.
Ramsey did create a fine opening for Wales shortly after arriving onto the pitch, feeding Dan James through on goal on the right of the box, but the Manchester United man's shot was a good height for Hugo Lloris to beat away.
But France moved up a gear again as Benzema struck the post with a brilliant turn and shot from the edge, the ball fortuitously falling to Dembele to slide home.
Leicester goalkeeper Ward, Wales' best player, denied Benzema's fierce header from a corner again late on, putting forward a good case to start at the Euros ahead of Wayne Hennessey, while Wales gave a debut to 19-year-old Rubin Colwill, who was playing academy football for Cardiff just four months ago.
Gareth Bale started for Wales alongside Harry Wilson and Dan James, while Aaron Ramsey was on the bench.
Karim Benzema was back for France after a near six-year absence, playing in a strong XI alongside Antoine Griezmann, Paul Pogba and Kylian Mbappe.
Even with 10 men, there were plenty of positives defensively for a Wales side who have conceded only 10 goals in 14 games, restricting the world champions for large periods despite the blatant advantage.
Page: Very harsh... 4th official even apologised!
Wales' manager Rob Page speaking to Sky Sports:
"[The red is] very harsh. We've looked back at half-time, and the fourth official apologised to me at the start of the second half, which probably makes it worse!
"It's impossible for [Williams] to do anything. I thought we started OK, created a couple of chances. We had to make a tweak to the formation before we started having seen their line-up; they played a diamond so Neco's positions changed slightly.
"We still created chances when we were down to 10 men. Disappointing, but a lot of positives to take.
"This [the red] might happen in the competition, so we have to deal with it. But there were some big performances from individuals, and we were a constant threat. Playing France with 11 is a difficult task; 10 is even harder."
James: Not even a penalty
Wales' Dan James speaking to Sky Sports:
"I am not one to talk about referees but it's taken 10 minutes to say it's clear and obvious? I don't even think it was a penalty. It can't be clear and obvious if he needed that long to give it.
"Even their players were saying: 'Don't send him off'. If it had happened against Switzerland, we would be a lot more gutted.
"I thought Danny Ward was the best player on the pitch, he made some unbelievable saves. All credit to Danny. I had chances I would have liked to score with. But we can take a lot of positives going into the Euros. We showed character."
Gabbidon's XI for Euro 2020 opener vs Switzerland
Former Wales defender Danny Gabbidon on Sky Sports:
"I think this is more what I want to see rather than what Robert Page will actually do. We saw a back-four from Wales against France to accommodate what their opponents did, and they do switch the system around.
"Neco Williams has made that left-back, left wing-back spot his own. You'd suspect Joe Allen to partner Ethan Ampadu as a solid combination.
"The two or three question marks; one, the goalkeeper. Wayne Hennessey or Danny Ward. I think Hennessey might get the nod, but Ward has certainly done his chances no harm.
"If you play with a 3-4-3, as Wales have done in recent games, where do you fit Ramsey in, as a central midfielder? As a false nine? So I think Wales might go back to a back four like they did tonight to accommodate him.
"When he's fit, he's in the team. It's as simple as that. We do not have a player of his type, he's the all-round midfielder. If you look at Wales, they are defensively solid, but they have struggled linking defence with attack, and that's his biggest strength, making those kind of runs deep into the opposition area and scoring goals. The key is getting him playing well, but there's a question mark as to where t play him.
"He's a player you have to wrap in cotton wool a little bit, like Gareth Bale. Juventus has been frustrating for him, a bit stop-start, but when Ramsey has a point to prove, when people are doubting, that's when he comes to the fore.
"Kieffer Moore is the other player who came on tonight and adds something different. You can go back to front, he can hold things up, and I think Wales look more of a threat on the counter attack with him. But of course, but he hasn't played much with him recently. I'd like to see him start, but there's still a lot of questions to answer for the starting XI."
- Since a 1-0 victory at Denmark back in November 2008, Wales have lost each of their last nine friendly matches as the away side, failing to score a single goal in any of the last eight.
- Gareth Bale has failed to score in any of his last nine starts for Wales.
- Karim Benzema has missed each of his last three penalties for France (the other two coming in 2014), while France have failed to convert five of their last eight.
Wales now host Albania in their final warm-up game on Saturday at 5pm, live on Sky Sports Football, before their opening Euro 2020 group match against Switzerland on Saturday June 12 at 2pm in Baku.
France face Bulgaria on Tuesday at 8.10pm in their final friendly, and then face Germany on Tuesday June 15 at 8pm in their opening Euro 2020 group match in Munich.