首页 > 解决方案 > 如何在 Selenium Python 中处理模态框或弹出框

问题描述

我正在使用 selenium python 来测试餐厅 pos 系统。

点击不同的类别菜单后,会弹出大约3种不同的弹出(模态)窗口,允许自定义选择项目。不同的类别会弹出不同的弹出(模态)窗口。

在此处输入图像描述

类别菜单代码为:

<div id="iopopsz" style="display: none">
 <div style="display:flex">
     ...code..
 </div>
</div>


<div id="comboitemsz" class="copt" style="display: none;">
    <div style="display: flex">
        ...code..
</div>
</div>

<div id="mcoption8sz" class="copt" style="display: none;">
        <div style="display: flex">
        ...code..
</div>
</div>

如您所见,有一个style="display: none;" 在每个类别中,如果未选择类别,则样式的值将保持显示:无

选择类别后,样式的值将更改为display:block

现在我需要先检查弹出哪个弹出(警报)窗口,然后切换到窗口单击一个项目。那我该怎么办?有朋友可以帮忙吗?

标签: javascriptpythonseleniumselenium-chromedriver

解决方案


我认为你可以用它get_attribute("style")来完成你在这里尝试做的事情。据我所知,您实际上并没有使用真正的警报——警报是一个没有 HTML 的 Javascript 弹出窗口,只能通过警报类接受或关闭。

以下是检查每个元素中的display: none和字符串的方法:display: block

first_item = driver.find_element_by_id("iopopsz")
style_attr_first_item = first_item.get_attribute("style") # "display: none"

if "display: none;" in style_attr_first_item:
    print("First item is not visible.")

希望这可以帮助您入门,并向您展示如何有效地检查每个元素的display: nonedisplay: block属性。


推荐阅读