The battle for automatic promotion will go down to the final weekend of the season after Fulham came from behind to beat Sunderland on Friday night.

Joel Asoro fired the already relegated Black Cats into the lead, but Lucas Piazon ensured the teams went into the break level when he stabbed home at the end of the first half.

The Whites showed a marked improvement after the restart and deservedly went in front when Aleksandar Mitrović headed in a Stefan Johansen free-kick.

Seven minutes stoppage time ended up being played but Fulham held on to make it 23 unbeaten and move two points ahead of Cardiff City, who travel to Hull the following day for their game in hand.

Having taken seven points from a possible nine, Slaviša Jokanović named an unchanged starting XI for the fourth time in a row. Injury ruled Neeskens Kebano out, so Luca de la Torre took his place on the bench.

The first effort on goal came in the 12th minute when Asoro dragged well wide from 20 yards. A corner was given for some reason, but thankfully the set-piece was easily cleared.

Five minutes later Ashley Fletcher volleyed over wildly from just inside the box as the visitors had the better of the early chances, with the Whites struggling to imprint their fluid style on proceedings.

A typical Denis Odoi break out of defence almost created an opening for Fulham midway through the first half when he played an eye of the needle pass towards Ryan Sessegnon. Black Cats goalkeeper Jason Steele was alive to the danger, though, and beat Sessegnon to the ball.

With the Whites beginning to get a foothold on the game, Steele was then called into action again when Ryan Fredericks whipped in a vicious shot from a tight angle, with the stopper clawing it away on the stretch.

Sunderland took the lead before the half hour mark when a long ball forward was flicked in-field by Fletcher to Asoro, who rolled Matt Targett before finding the bottom left-hand corner from the edge of the box.

An immediate response almost arrived when Piazon was invited to shoot from 18 yards, but his bobbling strike dropped just the wrong side of the post.

Fulham were dealt a big blow five minutes before half-time when Targett – who had been struggling with a knock since the goal – limped off. Jokanović used the opportunity to make an offensive change as Aboubakar Kamara replaced him, with Sessegnon dropping to left-back.

And Kamara had an immediate impact as his side restored parity in the final minute of normal time in the first half. After being fed by Johansen at the start of a counter-attack, he slipped in Fredericks whose cross was palmed back into danger by Steele, with Piazon gleefully mopping up the loose ball into the net.

John O’Shea was then booked in the aftermath for dissent as he thought Sunderland should have been awarded a penalty prior to the equaliser.

Things almost got better for the Whites in stoppage time when Mitrović did well to head Kamara’s deep delivery back across goal, but Lamine Kone just beat Tom Cairney to it.

Sunderland made a change of their own at the interval, with Adam Matthews replacing Billy Jones.

Fulham created an opening inside the first minute of the restart with some intricate play on the edge of the box, but it culminated in Johansen curling some way over.

Kamara had been a real nuisance down the right flank since his introduction, and he drew another save from Steele in the 51st minute with a powerful shot from an acute angle.

The substitute then drew a foul 25 yards from goal. Johansen took the set-piece and found the target, but Steele’s positioning was on point and he saved comfortably.

Fulham were pushing for their second goal and a clever snapshot from Mitrović could have brought it in the 57th minute, but Steele beat away his poked strike.

Another slick passage of play before the hour mark saw Kamra and Johansen combine to tee up Cairney who opened his body up and bent one towards the corner, but it went a yard the wrong side of the upright.

Paddy McNair then tried his luck from range, but Marcus Bettinelli was right behind it and not troubled.

Two yellow cards in quick succession followed for the visitors, with Fletcher and Steele each booked for time wasting.

A mazy run by Fredericks caused panic in the away penalty area but his shot at the end was blocked. The ball eventually found its way to Kevin McDonald but he couldn’t repeat his heroics of a week earlier and fired over.

Half of Craven Cottage thought Cairney had put his side in front on 72 minutes. His placed shot looked for all the world to be sailing in, but it missed the target by a lick of paint.

Jokanović then made his second change of the evening, as Rui Fonte came on for Piazon.

With quarter of an hour to go, there was an earthquake in SW6 as Mitrović made it 2-1. Johansen swung in a beautiful free-kick following another foul on Kamara, and the imposing Serb leapt high, headed down, and saw the ball fly into the net. Eruption at Craven Cottage.

Sunderland couldn’t deal with Kamara and after he’d been hacked down again in a dangerous position, Johansen almost punished them only for his sweet free-kick to be tipped behind by a sprawling Steele.

The Wearsiders’ final switch saw Josh Maja come on for Ethan Robson with five minutes to play, with the Whites following suit before long with Tomas Kalas replacing Cairney in attempt to see the game out.

Four minutes were added on but in the sixth minute of stoppages Kamara and McManaman were booked for an off-the-ball altercation, which thankfully proved to be the last action of the game as Fulham ensured the battle for second would go down to the wire.