Port took a first-half lead through Simon Kelly�s fine finish but the hosts dominated possession and should have been level at the break.
Fremantle continued to hold the upper hand in the second half and it was no surprise when they equalised with an hour on the clock.
They took the lead with a well-worked goal before adding a third with 10 minutes to go, the striker racing clear before rounding the �keeper and firing home.
Kelly grabbed a second for Port in the last minute but the home side held on to win.
Port host Wembley at Koorana Reserve on Sunday and will need a big improvement if they are to take anything from the game.
Port reserves were good value for their 2-1 win, with goals by Carlos Almeida and Giovanni Spissu and a fine penalty save by Alex Prescott.