however, if the car only stays too long at high idle then there is another possibility, two of them actually (even if IAC valve works fine):
a) the Engine Coolant Temperature sensor for Electronic Fuel Injection (in short ECT for EFI) is wrongly reporting too low temperature for a long time and ECU holds the car up in high RPM to keep warming it up (while in fact it could be half way to warm already). ECT for EFI sensor is a primary feed to the ECU, it's unmonitored, so it will never know if it works bad or not.
that sensor costs around $45 OEM from a dealer online, easy to replace on 5s-fe, even without draining coolant, it's a sensor with green plug (2 wires) and golden base (19mm deep wall socket should fit over it after unplugging). it sits on driver side of engine when looking under hood and standing in front of car. right by it is another coolant sensor (sender actually) which is 1-wire only and only feeds the coolant temp gauge on the dash. there is a non-re-usable copper gasket under each of those sensors too, so get it along with new sensor if planning to replace, torque is 14ft-lbs.
you can test the resistance between ect for efi sensor's terminals, but it won't tell you much without knowing the exact coolant temperature at same time. extrapolating the temperature from the resistance when using diagrams like the one below is pointless, because you only translate the resistance into temp degrees and still don't know the real temperature of coolant (same about OBD2 scanner reporting coolant temperature).
you would need to remove the sensor and put it in the hot water bath while measuring the resistance AND checking the water temperature at same time.
b) coolant temperature is in fact cold and stays cold for other reasons (e.g. thermostat is stuck open) and car in fact takes a long time to warm up.
Consider all options to be possible (including a sticky IAC valve too).