2016-02-25 6 views
1

Это HTML код страницы исток bitbucket.org страницыСелен нажатие кнопки не работает

<div class="aui-layer aui-dialog2 aui-dialog2-large" role="dialog" aria-hidden="false" data-aui-focus="false" data-aui-blanketed="true" style="z-index: 3000;"> <header class="aui-dialog2-header"> 
    <h1 class="aui-dialog2-header-main dialog-title">Add SSH key</h1> 

    </header> 

<div id="bb-new-ssh-key-dialog-content" class="aui-dialog2-content "><form id="new-ssh-key" method="post" class="ssh-keys-form aui"> 

    <input type="hidden" name="csrfmiddlewaretoken" value="Y1fI2KoE87IKZwncZHYIh7zBpFyfXMsI"> 
    <div id="id_label_group" class="field-group "> 
     <label for="id_label"> 
      Label 
     </label> 

      <input class=" text long-field" id="id_label" maxlength="255" name="label" type="text"> 
    </div> 
    <div id="id_key_group" class="field-group "> 
     <label for="id_key"> 
      Key<span class="aui-icon icon-required"></span><span class="content">required</span> 
     </label> 

      <textarea class=" textarea long-field" cols="40" columns="40" id="id_key" name="key" placeholder="Paste your key here..." rows="8"></textarea> 
    </div> 
<p class="field-group"> 
    <strong class="heading">Already have a key?</strong> 

    Copy <a href="https://confluence.atlassian.com/x/YwV9E" target="_blank">your key</a> to your clipboard 

    <span class="ssh-key-copy-help mac">with: <code>cat ~/.ssh/id_rsa.pub | pbcopy</code></span> 
    <span class="ssh-key-copy-help linux" style="display: inline;">with: <code>xclip -sel clip &lt; ~/.ssh/id_rsa.pub</code></span> 
</p> 
<p class="field-group" id="ssh_error_help"> 
    <strong class="heading">Problems adding a key?</strong> 

    Read our <a href="https://confluence.atlassian.com/x/2YJnJ" target="_blank">knowledge base</a> for common issues. 

</p> 
    <div class="buttons-container"> 
     <div class="buttons"> 
     <input type="hidden" name="action" value="add-key"> 
     <button type="submit" id="add_key_button" class=" hidden add_key_button"> 
      Add key 
     </button> 
     </div> 
    </div> 
    </form></div> 

    <footer class="aui-dialog2-footer"> 
    <div class="aui-dialog2-footer-actions"> 
     <button class=" aui-button aui-button-primary dialog-submit" resolved=""> 
      Add key 
     </button> 
     <button class=" aui-button aui-button-link dialog-cancel" resolved="">Cancel</button> 
    </div> 

    </footer> 
</div> 

Я хочу нажать кнопку с текстом «Добавить ключ». Я попытался следующие команды с помощью селена

1. driver.find_element_by_xpath("//button[contains(text(),'Add key')]").click() 
2. driver.find_element_by_tag_name("footer").find_element_by_tag_name("div").find_element_by_xpath("//button[contains(text(),'Add key')]").click() 
3. driver.execute_script("document.getElementByXPath(\'' + //button[contains(text(), 'Add key')] + '\').click()") 

Но ничего не вышло из этих возможностей и бросает ошибку, что не может найти нужный элемент. Окно выглядит как всплывающее окно, поэтому я также попытался переключиться на iframe, но это тоже не удалось.

enter image description here Что я могу сделать, чтобы нажать эту кнопку. Любая помощь будет оценена по достоинству.

+0

Вы входите в битбакет в своем фактическом коде? 'Driver.find_element_by_xpath (« // кнопка [содержит (текст(), «Добавить ключ»)] »). Click()' на самом деле выглядит хорошо для меня. Вы пытались добавить 'time.sleep()' перед этим (только для целей отладки)? Благодарю. – alecxe

+0

Да, я добавил 'time.sleep (10)' для целей тестирования. –

ответ

2

Вы пробовали что-то вроде:

driver.find_element_by_xpath("//div[@class='aui-dialog2-footer-actions']//button[contains(text(), 'Add key')]").click() 

См this post.

+0

Это вызывает ошибку 'Message: элемент не кликается в точке (579, 257). Другой элемент получит клик: ' –

+0

Я не понимаю, почему так ошибается. Является ли кнопка видимой? и почему у вас есть 2 кнопки (Добавить ключ) на ваш html? – rrw

+0

Я также не знаю, почему это так. –

0

Будьте уверены, что кнопка видна. Попробуйте использовать Thread.sleep (3000) или более, прежде чем

+0

Я использовал time.sleep (10), но это не сработало –

+0

Смотрите, то это не связано с проблемой, связанной с временем. Кажется, что в коде вы используете текст «Добавить ключ» несколько раз, и путь становится путаным, что нужно найти. Также лучше использовать какой-то идентификатор или любой другой случай вместо текста в качестве клавиши «Добавить». – Fazz

0

Вы можете попробовать использовать селектор CSS или имя класса -

driver.find_element_by_css_selector(".dialog-submit").click() 

driver.find_element_by_class_name("dialog-submit").click() 

В качестве альтернативы, вы можете попробовать -

wait = WebDriverWait(driver, 10) 
bttn = wait.until(expectedCondition.presence_of_element_located((By.CLASS_NAME , "dialog-submit"))) 

driver.execute_script("arguments[0].click();", bttn) 

где expectedCondition является импортируется как:

from selenium.webdriver.support import expected_conditions as expectedCondition 

Надеюсь, это поможет!

0

В вашем HTML есть две кнопки «добавить ключ», поэтому в соответствии с функцией selenium сначала найдите ключ добавления, поэтому вам нужно перейти на вторую кнопку добавления ключа.

Для этого у вас есть использование XPath

//footer[@class='aui-dialog2-footer']/div/button 

или

//footer[@class='aui-dialog2-footer']/div/button//button[contains(text(),'Add key')] 
0

Хотя может оказывается кошмаром для поддержания, вы могли бы попытаться получить абсолютную XPath с поджигатель и дать ему шанс , Это выглядит примерно так: «/ html/body/div [1]/...»

-Это было бы лучше в комментарии, но еще не совсем там.

Смежные вопросы