Arsenal missed the chance to go fourth in the Premier League as they were outplayed by Wolves at Molineux.
Ruben Neves put the hosts ahead with a direct free-kick from 25 yards before Matt Doherty headed in a second.
Diogo Jota added a third just before half-time after the Gunners gave the ball away and he ran at the away defence before firing a shot under goalkeeper Bernd Leno.
Arsenal defender Sokratis headed in from Granit Xhaka’s corner in the 80th minute but it was not enough for the Gunners.
The victory takes Wolves up from 10th to seventh, while Arsenal remain fifth, one point adrift of fourth-placed Chelsea and four behind north London rivals Tottenham.
With three games left of the season, Wolves are in contention to qualify for Europe.
If Manchester City beat Watford in the FA Cup final the team finishing seventh in the Premier League will take the last available European spot and enter next season’s Europa League at the second qualifying round phase.
Wolves’ win continues a remarkable campaign for Nuno Espirito Santo’s side in their first season since winning promotion from the Championship.
The hosts went into the match without a win in three games in all competitions but were on top even when the game was goalless as Joao Moutinho curled wide from 25 yards and Raul Jimenez just failed to connect with Jonny’s through ball.
Neves then gave Wolves a deserved lead in the 28th minute with a fine free-kick after Nacho Monreal had clumsily bundled over Jonny in a central position.
A well-worked move from a short corner – albeit with Arsenal’s defenders not applying pressure – left Jonny with space to cross and Doherty got to the ball before Leno to head into the net and double his side’s lead.
Another Arsenal error led to Wolves’ third as the ball was given away to Jota, who drove forward and shot under Leno, who should have done better.
This win means Wolves have picked up 16 points in their matches against the current top six this season, a record that includes wins over Tottenham, Chelsea, Manchester United and now Arsenal.
Wolves are also aiming to become the first newly promoted side to finish in the top eight since Reading finished eighth in 2005-06, while no promoted team has finished higher than that since Ipswich Town were fifth in 2000-01.
For Arsenal it was a second successive defeat after they lost 3-2 to Crystal Palace on Sunday.
Manager Unai Emery made seven changes to his starting line-up from that match, although he was without the injured Pierre-Emerick Aubameyang – the Premier League’s joint-top goalscorer with 19 goals in 2018-19.
Without him, a tired-looking Gunners side struggled to create chances, with Mesut Ozil ineffective and Alexandre Lacazette seeing little of the ball.
The France forward did make one opportunity out of nothing when he skipped past Willy Boly and Jonny, but he then shot well wide in his only attempt.
Sokratis’ header from Xhaka’s right-wing corner in the 80th minute gave Arsenal hope, but they could not find further goals to gain the point that would have taken them above Chelsea.
Emery’s side did not in truth deserve anything and the Spaniard will be furious at the three goals conceded – a needless free-kick given away for the first, the defence switching off to enable Jonny to cross for the second and his side losing possession in the build-up to Jota’s third.
This is the second successive season the Gunners have been without Champions League football, although they are still in the semi-finals of the Europa League and if they win it they will qualify automatically for the top tier of European football next season.
To secure that prize through a top-four Premier League finish, they now need Tottenham or Chelsea to slip up.
Man of the match – Ruben Neves (Wolves)