如何使用selenium(Python)单击Alertify对话框按钮

时间:2017-03-25 19:06:52

标签: python selenium

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

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')]"))

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

这里隐藏了一个alertify对话框,屏幕上有一个alertify对话框,我想点击(按“OK”按钮)

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

This way i want

参考:enter image description here(参见“默认用法”示例代码)

2 个答案:

答案 0 :(得分:1)

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

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

  1. 找到包含“确定”的所有按钮,循环浏览它们以查找可见的按钮,然后单击它。

  2. 制作一个XPath,查找包含OK的按钮,该按钮不是包含类DIV的{​​{1}}的后代,然后单击它。

  3. 我打算做#2。

    ajs-hidden

    旁注/建议......不要像使用driver.find_element_by_xpath("//div[not(@class='ajs-hidden')]//button[.='OK']").click() click_element()那样将基本的Selenium方法包装在包装函数中。他们真的没有做任何事情,你已经为Selenium创建了一个专有的API,其他阅读你代码的人将不得不学习。把事情简单化。上面的一个衬里应该完全符合你的需要,任何知道Selenium和python的人都可以理解。

答案 1 :(得分:0)

解决了我的问题,

纠正xpath:

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

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