South Africa defeated Botswana 2-0 in the 2017 COSAFA Cup plate semi-final match at the Moruleng Stadium in Moruleng on Tuesday.
As a result, Bafana Bafana will take on the winner between Namibia and Swaziland in the plate final on Friday, while the Zebras are out of the competition.
The Zebras started brightly and they nearly took an early lead through Lemponye Tshireletso's deflected effort just nine minutes into the encounter.
The attacking midfielder's effort was parried by South Africa goalkeeper Bruce Bvuma and the ball was then cleared off the goal line by Mario Booysen.
The Kaizer Chiefs shot-stopper was also called into action in the 31st minute and this time he saved Botswana winger Kabelo Seakanyeng's long range attempt.
Then two minutes later, South Africa took the lead when Riyaad Norodien beat Botswana keeper Mwampule Masule with a powerful shot to make it 1-0 to the hosts.
Botswana had a chance to level matters following a scramble in the Bafana Bafana box four minutes before the half-time break.
However, Bvuma denied Township Rollers winger Tshireletso from close range to ensure that the first-half ended with South Africa leading 1-0.
The Zebras pushed for the equalizing goal after the restart, but they were struggling to penetrate the Bafana defence which was led by Booysen.
On the hour-mark, Seakanyeng tried his luck from range and his low shot was comfortably saved by Bvuma, who was well positioned.
Bvuma then produced a great finger-tipping save denying Botswana defender Simisani Mathumo, who had unleashed a thunderous shot from range a few minutes later.
Bafana looked dangerous on the counter-attack and Lebogang Maboe found some space outside the Botswana in the 74th minute, but he fired wide of the target.
Judas Moseamedi, who was introduced in the closing stages of the match, sealed South Africa's 2-0 victory beating Masule with a good finish in stoppage time.
South Africa (1) 2 (Norodien 32', Moseamedi 92')
South Afruca: Bvuma, Mukumela, Malepe,
Booysen, Mvala, Masalesa, Cele (Alexander 59'), Maboe, Norodien (Webber 46'), Mokate (Moseamedi 85'), Sibiya.
Botswana XI: Masule, Leinanyane, Gaolaolwe, Mosimanyana (Seforo 46'), Mathumo, Galenamotlhale (Setsile 50'), Legwaila (Gadibolae 57'), Seakanyeng, Maswena, Orebonye, Tshireletso.