Villa extended their unbeaten sequence to five league and cup matches but had to settle for a single point against neighbours Albion at The Hawthorns.
Rémi Garde's side had the better of a largely uneventful derby with Jordan Ayew and Ashley Westwood having good efforts tipped away by Ben Foster.
Villa keeper Mark Bunn, by contrast, didn't have a shot to save as both side struggled to create clear-cut chances.
The opening minutes were tentative in the extreme, although Joleon Lescott did well to head away James McClean's testing cross from the left as the Baggies looked to make an early impact.
Idrissa Gana posed Villa's first threat when he worked his way into a good position the right before delivering a cross which, unfortunately, drifted beyond everyone and away to safety on the other side of the pitch.
There was a scare in the visitors defence when Albion broke down the left and the ball was played inside to Stephane Sessegnon, whose powerful drive cannoned off Lescott before it could do any damage.
It was Villa, though, who produced the first on-target effort, Jordan Ayew's low 20th minute shot being tipped away by the diving Ben Foster before the home side managed to clear.
Then Carles Gil crossed from the right, forcing Craig Dawson to head over his own bar as Libor Kozak challenged.
In the 24th minute Villa felt they should have had a penalty when Ayew went down under Jonas Olsson's challenge, but referee Robert Madley ignored the visitors' appeals and Albion responded with a menacing Sessegnon cross which was well held by Mark Bunn.
Villa's best move so far saw Ayew and Carles Gil combine to send Kozak through the middle.
The Czech striker went past Foster and hit the post from a narrow angle, only to see that he had been flagged offside.
Even so, it clearly inspired confidence in Garde's side, who dominated the next few minutes and barely lost possession.
When Albion finally got back into the game, Craig Gardner's free-kick deflected for a corner just as the half-time whistle blew, and another Gardner free-kick just after the interval also came to nothing.
Sessengon wasn't far wide of the left-hand post with a swerving 53rd minute drive, although Salomon Rondon's right-foot effort a couple of minutes later ended high into the Birmingham Road End.
Both keepers excelled in the space of 60 seconds as the game swung from one end the other.
Bunn flung himself to tip away Gardner's dangerous cross from the right, and almost immediately Ashley Westwood's 25-yarder tested Foster.
Rudy Gestede was introduced as a 64th-minute sub for Libor Kozak and the Benin international was soon at the heart of the action, sending one header wide from Gil's cross and another off target from a Cissokho centre.
Gil threaded a fine pass through to Ayew in the 79th minute but his shot was blocked and the ball bounced back off him for a goal kick.
Gestede had been causing Albion problems in the air but 10 minutes from the end he suffered what looked like a hamstring injury and was replaced by Jordan Veretout.
A minute after his departure, though, Villa were close to going ahead, Ashley Westwood's low right-foot shot being push away for a corner by the diving Foster.
Unfortunately, Gana and Bacuna were unable to keep subsequent efforts down and three minutes of stoppage time failed to break the deadlock.
West Brom: Foster; Dawson, McAuley, Olsson, Evans; Fletcher, Yacob; Sessegnon (McManaman74), Gardner (Berahino 64), McLean; Rondon (Anichebe 64). Unused subs: Myhill, Chester, Pocognoli, Lambert.
Villa: Bunn; Richards, Okore, Lescott, Cissokho; Gana, Westwood; Bacuna, Gil, Ayew; Kozak (Gestede 64, Veretout 80). Unused subs: Guzan, Clark, Sinclair, Veretout, Lyden, Grealish.