#selenium
Вопрос:
На внешнем веб — сайте я пытаюсь нажать кнопку «Сохранить». Но кнопка отмены имеет тот же класс.
buttonSave = browser.find_element_by_class_name("_spectrum-Button_7a745")
buttonSave.click()
HTML :
<button class="_spectrum-Button_7a745 _spectrum-Button--secondary_7a745 _spectrum-ButtonGroup-Button_25328" type="button" data-testid="cancel-button">
<span class="_spectrum-Button-label_7a745">Cancel</span>
</button>
<span class="_spectrum-Button-label_7a745">Cancel</span>
<button class="_spectrum-Button_7a745 _spectrum-Button--cta_7a745 _spectrum-ButtonGroup-Button_25328" type="button" data-testid="cta-button">
<span class="_spectrum-Button-label_7a745">Save</span>
</button>
<span class="_spectrum-Button-label_7a745">Save</span>
Комментарии:
1. Я вставил разрывы строк в ваш HTML — код-вы уверены, что для каждой кнопки есть две одинаковые метки?
Ответ №1:
В этом случае вы можете подать text based xpath
заявку .
//span[text()='Save']/parent::button
В HTML-файле, которым вы поделились, в основном два сохраненных текста. Таким образом, когда мы просто пишем xpath на основе текста, который является //span[text()='Save']
, мы все равно останемся без двух узлов. поэтому для дальнейшего различения мы должны использовать родительский узел, который является кнопкой, поэтому мы используем parent::button
PS: xpath на основе текста следует использовать только в том случае, если инженер по автоматизации знает, что веб-сайт будет на определенном языке. в данном случае, например, для английского языка.
Также в случае , если вы ищете css_selector
, приведенное ниже должно выполнить свою работу.
button[data-testid='cta-button']
Код с использованием xpath :
buttonSave = browser.find_element_by_xpath("//span[text()='Save']/parent::button")
buttonSave.click()
Код с использованием css_selector :
buttonSave = browser.find_element_by_css_selector("button[data-testid='cta-button']")
buttonSave.click()