【问题标题】:Selenium button click not working硒按钮单击不起作用
【发布时间】:2016-06-07 17:55:39
【问题描述】:

这是bitbucket.org网页源页面的HTML代码

    <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>

我想按下带有“添加键”文本的按钮。我尝试使用 selenium 执行以下命令

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,但也失败了。

我该怎么做才能单击此按钮。任何帮助将不胜感激。

【问题讨论】:

  • 您是否在实际代码中登录到 bitbucket? driver.find_element_by_xpath("//button[contains(text(),'Add key')]").click() 实际上对我来说看起来不错。您是否尝试在它之前添加time.sleep()(仅用于调试目的)?谢谢。
  • 是的,我添加了time.sleep(10) 用于测试目的。

标签: python html selenium button bitbucket


【解决方案1】:

您是否尝试过类似的方法:

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

this post

【讨论】:

  • 这会引发错误Message: Element is not clickable at point (579, 257). Other element would receive the click: &lt;textarea class=" textarea long-field" cols="40" columns="40" id="id_key" name="key" placeholder="Paste your key here..." rows="8"&gt;&lt;/textarea&gt;
  • 我不明白为什么会这样。按钮是否可见?为什么你的 html 上有 2 个按钮(添加键)?
  • 我也不知道为什么会这样。
  • 在 element.click() 期间按钮是否可见??
  • 我已添加driver.find_element_by_xpath("(//textarea[@name='key'])[2]").send_keys('key added') 用于将密钥发送到输入区域。这工作正常,但我不确定这一点,因为它抛出了不可点击的错误,所以这就是我在这里发布我的查询的原因。
【解决方案2】:

确保按钮可见。尝试在之前使用 Thread.sleep(3000) 或更多

【讨论】:

  • 看,这和时间无关的问题。似乎在代码中您多次使用文本“添加键”并且路径变得混乱,要定位..所以最好使用一些 id 或任何不同的大小写而不是文本作为添加键。
【解决方案3】:

您可以尝试使用 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

希望对你有帮助!

【讨论】:

    【解决方案4】:

    在您的 HTML 中存在两个“添加键”按钮,因此根据 selenium 功能它会找到第一个添加键,因此您需要继续第二个添加键按钮。

    为此,您必须使用 xpath

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

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

    【讨论】:

      【解决方案5】:

      尽管维护起来可能是一场噩梦,但您可以尝试使用 firebug 获取绝对 xpath 并试一试。它看起来像“/html/body/div[1]/...”

      -这在评论中会更好,但还没有-.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-08
        • 2023-04-05
        • 2020-04-15
        • 1970-01-01
        • 2018-11-02
        相关资源
        最近更新 更多