In a rain-delayed afternoon in Edgbaston, England managed a total of 284 in their first innings, before limiting to India to 125/3 in day three to trail by 257.
Jonny Bairstow yet again shone with the bat for England, with the 32-year-old following up his superb Test performance against New Zealand by recording another century, with the Yorkshire star scoring 104 from 140.
Bairstow resumed in the morning alongside captain Ben Stokes, who continued his aggressive approach since being appointed captain. He only managed 25 from 36, though, before becoming Shardul Thakur's first victim of the day.
Sam Billings contributed 36 from 57 before being bowled by Mohammed Siraj, while Stuart Broad added just a solitary run before Siraj struck once again.
Matthew Potts rounded off the innings with 19 from 18 deliveries to leave England 132 runs adrift.
When India returned to bat, James Anderson gave England a thrilling start by claiming the wicket of Shubman Gill after his first two deliveries.
Hanuma Vihari and Virat Kohli also fell for just 11 and 20 respectively, but a strong stand from the duo of Cheteshwar Pujara and Rishabh Pant ensured the Tourists ended day 3 on 125 for three.
Ben Stokes showed his leadership by putting himself forward to spearhead the assault on the experienced duo of Kohli and Pujara early on, and his decision paid off as he delivered a big blow in his third over.
Stokes unsettled Kohli when he got one to leap off a length, rising into the glove and flying through to Billings. The wicketkeeper spilled it, but the quick reactions of Joe Root - who snatched up the deflection one-handed - ensured the chance did not go to waste.
However, India will resume day four with the duo of Pejara and Pant. The former will look to build on his half-century, while Pant will be full of confidence after his first innings total of 146.
Play resumes at Edgbaston at 10:30 BST on Monday, July 4, with India currently boasting a 257-run lead.