【问题标题】:How do I click Alertify dialog button using selenium (Python)如何使用硒(Python)单击警报对话框按钮
【发布时间】:2017-03-27 16:22:34
【问题描述】:

如果我只有一个带有“OK”文本的警告对话框,我有以下代码可以正常工作并正确单击“OK”按钮,

def click_element(self, element):
    element.click()

def find_by_xpath(self, xpath):
    return driver.find_element_by_xpath(xpath)

self.click_element(self.find_by_xpath("//button[contains(.,'OK')]"))

但是,如果页面中有多个带有相同“确定”按钮的警报对话框,则无法单击屏幕上处于活动状态的警报对话框, 我认为这里的问题是隐藏的警报对话框,它也有“确定”按钮。我用谷歌搜索,但没有找到为这个问题编写 xpath 的方法。

这里隐藏了一个 alertify 对话框,并且在我要单击的屏幕上显示了一个 alertify 对话框(使用“确定”按钮)

我注意到当前打开的 alertify 对话框中没有“ajs-out ajs-hidden”类(您可以参考随附的屏幕截图)。

Ref:Alertify Dialog example(参见“默认用法”示例代码)

【问题讨论】:

  • 也许您拥有的 xpath 不正确。试试 xpath '//div[@class='ajs-primary']/button'
  • 更新了截图,让问题更加清晰
  • 虽然在这种情况下 HTML 的图像有些帮助,因为您已经标记了它,但通常将 HTML 作为文本发布更有用,因为它允许读者抓取文本并将其用于尝试解决您的问题。就我而言,我不得不将部分图像转换为文本来测试我的 XPath,这很麻烦。
  • 对不起@JeffC,下次我发布任何问题时我会记住这一点... [这是我提供警报对话框示例链接的原因之一:-),它具有相同的 html /css 代码,我已在屏幕截图中发布]

标签: python selenium


【解决方案1】:

感谢您的澄清……现在一切都变得更有意义了。 :)

所以你基本上有两个(或更多)确定按钮,其中只有一个是可见的。有几种方法可以做到这一点:

  1. 找到所有包含“确定”的按钮,遍历它们以找到可见的按钮,然后单击它。

  2. 创建一个 XPath,查找包含 OK 的按钮,该按钮不是包含类 ajs-hidden 的 DIV 的后代,然后单击它。

我要做#2。

driver.find_element_by_xpath("//div[not(@class='ajs-hidden')]//button[.='OK']").click()

旁注/建议...不要像使用 click_element() 和 find_by_xpath() 那样将基本的 Selenium 方法包装在包装函数中。他们真的什么都做不了,而且你已经为 Selenium 创建了一个专有的 API,其他阅读你的代码的人必须学习。把事情简单化。上面的一个衬里应该完全满足您的需求,并且任何了解 Selenium 和 python 的人都可以理解。

【讨论】:

  • 嗨,我已经更新了屏幕截图以使问题更加清晰
  • driver.find_element_by_xpath("//div[not(@class='ajs-hidden')]//button[.='OK']").click() 不起作用:(
  • 它适用于您提供的 HTML。发布页面链接?
  • 如果您发现这个(或任何)答案有帮助,请点赞。如果这回答了您的问题,请将其标记为已接受的答案。谢谢!
【解决方案2】:

下面修复了我的问题,

正确的xpath:

driver.find_element_by_xpath("//div[contains(@class, 'alertify') and not(contains(@class, 'ajs-hidden'))]//button[.='OK']")

感谢 JeffC 向我展示了如何排除(否定条件)类 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2011-08-08
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多