【问题标题】:Clicking a button using xpath使用 xpath 单击按钮
【发布时间】:2016-02-21 20:21:51
【问题描述】:

我正在尝试单击此按钮:

        <div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix">
            <div class="ui-dialog-buttonset">
                <button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" type="button" role="button" aria-disabled="false">
                    <span class="ui-button-text">Create</span>
                </button>
               <button aria-disabled="false" role="button" class="ui-button ui-widget    ui-state-default ui-corner-all ui-button-text-only" type="button">

               <span class="ui-button-text">Close</span>
               </button>
               </div>

我想使用 xpath 来实现。这是我的代码:

driver.find_element_by_xpath("/html/body/div[22]/div[3]/div/button[1]")

我也试过了:

driver.find_element_by_xpath(".//div[22]/div[3]/div/button[1]")

我不断收到错误无法定位元素。我应该尝试不同的定位器

【问题讨论】:

    标签: python html selenium xpath


    【解决方案1】:

    试试

    点击Close按钮-

    driver.find_element_by_xpath("//button[@class='ui-button ui-widget    ui-state-default ui-corner-all ui-button-text-only']/following-sibling::span[@class='ui-button-text' and contains(text(),'Close')]").click()
    

    【讨论】:

    • 可能会找到很多按钮
    • 你能保证只有一个div 类名ui-dialog-buttonpane ui-widget-content ui-helper-clearfix 或者分享更多的html 源代码——或者更好的url
    • 好的,我添加了代码的结尾部分。有 2 个按钮似乎具有相同的标签,但名称不同。 “创建”、“关闭”
    【解决方案2】:

    由于 CSS 相同,您可以获取所有按钮、获取文本并查看是否是您想要的并单击它。我不知道python 所以请原谅我的语法错误。

    buttons = driver.find_elements_by_css_selector("button")
    
    for button in buttons:
      if button.text.strip() == "Create":
        button.click()
    

    【讨论】:

      【解决方案3】:

      有多个问题可能导致该问题。如果没有该页面的完整来源,就无法判断是哪个页面造成的。几个例子:

      • 按钮是动态加载的吗?如果是这样,Selenium 可能会在它实际出现在页面上之前尝试访问它。您可能必须等到元素加载完毕。

      • 按钮是否在 iframe 内?在这种情况下,您需要使用 driver.switch_to_frame() 切换到正确的名称。有关如何切换帧的更多信息,请参阅this page

      • 您是否正在动态加载其他元素?由于按钮似乎在 div 22 中,这似乎是可能的。这可能会在加载这些元素时更改按钮的 XPath。

      最后,如果 XPath 正确,则元素已加载,并且您正在查看正确的框架,它应该能够找到该元素。如果您可以编辑页面源,一种解决方案是向您尝试单击的按钮添加一个 id 属性。然后通过其 ID 定位元素将是微不足道的。您可以找到该here 的文档。请注意,ID 必须是唯一的,以确保您找到正确的按钮。这也将解决其他元素被动态加载的问题。

      【讨论】:

      • 谢谢。它在 iframe 内
      • 是的,iframe 花了 2 个小时才弄明白...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 2020-05-08
      • 2016-04-29
      • 1970-01-01
      相关资源
      最近更新 更多