Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用selenium(Python)单击Alertify对话框按钮_Python_Selenium - Fatal编程技术网

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

如何使用selenium(Python)单击Alertify对话框按钮,python,selenium,Python,Selenium,我有下面的代码,可以正常工作,如果我只有一个带有“OK”文本的alertify对话框,请正确单击“OK”按钮 但是,如果我在页面中有多个alertify对话框,并且有相同的“OK”按钮,那么它无法单击屏幕上处于活动状态的alertify对话框, 我认为这里的问题是隐藏的alertify对话框,它也有“OK”按钮。我在谷歌上搜索过,但没有找到为这个问题编写xpath的方法 这里隐藏了一个alertify对话框,屏幕上有一个alertify对话框,我想点击它(用“OK”按钮) 我注意到当前打开的al

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

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

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

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


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

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

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

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

  • 创建一个XPath,查找包含OK的按钮,该按钮不是包含类
    ajshidden
    DIV的后代,然后单击它

  • 我要做第二件事

    旁注/建议。。。不要像使用
    click\u element()
    find\u by\u xpath()
    那样将基本的Selenium方法包装在包装器函数中。他们真的什么也做不到,您已经为Selenium创建了一个专有API,其他阅读您代码的人必须学习它。保持简单。上面的一行代码应该完全满足您的需要,任何了解Selenium和python的人都可以理解。

    下面修复了我的问题

    正确的xpath:

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

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

    可能您使用的xpath不正确。尝试xpath
    “//div[@class='ajs-primary']/button'
    更新了屏幕截图以获得更清晰的问题,而本例中的HTML图像有些帮助,因为您已经标记了它,一般来说,将HTML作为文本发布更有用,因为它允许读者获取文本并使用它来解决您的问题。在我的例子中,我不得不将部分图像转换成文本来测试我的XPath,这很麻烦。抱歉@JeffC,下次我发布任何问题时,我会记住这一点。。。[这是我给出alertify dialog:-)示例链接的原因之一,该链接与我在屏幕截图中发布的html/css代码相同]嗨,我已经更新了屏幕截图,以便更清楚地显示issuedriver。通过xpath(“div[not(@class='ajs-hidden')]//button[.='OK'])查找元素。单击()不起作用:(它适用于您提供的HTML。发布页面链接?如果您发现此(或任何)答案有帮助,请向上投票。如果此答案回答了您的问题,请将其标记为已接受的答案。谢谢!
    driver.find_element_by_xpath("//div[not(@class='ajs-hidden')]//button[.='OK']").click()
    
    driver.find_element_by_xpath("//div[contains(@class, 'alertify') and not(contains(@class, 'ajs-hidden'))]//button[.='OK']")