@zacc  I think these 2 frames are different. 
The first one is iframe[src^='app://communications'][src$='contacts/index.html?new']. This is the frame to add a new contact.
The second one is _contact_frame_locator = ('css selector', '#iframe-contacts'), This is a frame defined inside dialer/index.html. After I switch to this frame , the url is actually frame contacts/index.html. But I cannot locate to this frame locator  iframe[src^='app://communications'][src$='contacts/index.html]. This is really weird. 

@zacc do you have any idea about this?