«Наилучшее» на самом деле зависит от того, что, по вашему мнению, наименее вероятно изменится. Как правило, это будет элемент id
.
В вашем примере я бы использовал username = driver.find_element_by_id('UserName').getAttribute('value')
Однако иногда элемент не имеет id
. Опять же, «лучшее» должно основываться на том, что наименее вероятно изменится. В порядке того, что я видел в своем опыте от лучшего к худшему:
id
name
- какая-то версия
find_elements_by_xpath("//*[contains(text(), 'xyz')]")
- 1020 * XPath *
- css_selector