I've been a freelance full-stack developer for the past 1.5 years. I never bothered trying out Upwork, because I had the impression the price competition there was insane, so I can't comment on the experience there. But I've been on Toptal for the past year and it's been an overall great experience. Not only have I not had an issue being paid, but Toptal actually guarantees my invoice payments: basically there's a clause that states that I can expect a payment from Toptal within a few days after the invoice due date, regardless of whether or not the client actually paid the invoice.
In which situations would freelancers not be paid ? I feel like once the employer accepts the contract it his responsibility to stop it if the work is not done (so the employer will always be paid for the hours he submitted)