The hosts showed five changes to the side who won 2-1 at home to Queens Park Rangers last time out, with the Robins having won nine games in a row in all competitions.
Nuno Espirito Santo made three alterations to his line-up, with John Ruddy, Romain Saiss and Cavaleiro replacing Rui Patricio, Ruben Neves and Diogo Jota.
The visitors enjoyed the better of the early exchanges, without being able to trouble home keeper Frank Fielding, with neither side having registered a shot on target as the half-hour mark approached.
That all changed with 28 minutes on the clock as Matt Doherty made a superb break down the right flank and his cross into the area was perfect for Cavaleiro to drive the ball into the net.
Doherty went close to doubling the lead soon after as his effort struck the outside of the post, following an exchange of passes with Raul Jimenez.
Jimenez was involved again as Leander Dendoncker eventually saw his effort pushed to safety by Fielding, with the visitors now in charge of the game.
The lone reply from the hosts came as Bailey Wright picked out Kasey Palmer in the area, but he was unable to direct his header on target.
City made a double change at the interval in a bid to improve their fortunes and they enjoyed plenty of possession in the opening minutes of the second half.
Palmer went close with a curling long-range free-kick, but the Robins were still unable to test Ruddy in the Wolves goal.
With just over 20 minutes to play, Wright and Marlon Pack became the first players to draw saves from Ruddy, with the one-cap England goalkeeper showing good handling.
At the other end Fielding did well to tip a Joao Moutinho free-kick over the crossbar, before Pack was unable to get enough power on his shot to inconvenience Ruddy.
Late on Ruddy reacted smartly to keep out a Matty Taylor flick and his block from his opposite number, Fielding - who was up for a last-ditch corner - ensured that Wolves edged home.