如何在测试执行期间停止/处理随机HTML弹出窗口-Selenium Webdriver

如何在测试执行期间停止/处理随机HTML弹出窗口-Selenium Webdriver,selenium,Selenium,我希望有人能帮我解答这个问题。我在网上做了很多研究,还没有找到任何特别的解决方案 在运行测试用例时,我有时会遇到无法在脚本中处理的HTML弹出窗口。它是非常随机的(根据客户浏览网站时的行为而定),可以在客户旅程中随时弹出。有时它根本不会弹出。当它出现时,只有一个条目在DOM中可见 基本上,它是一个livechat窗口(确切地说是LivePerson),建议客户如果愿意,可以通过代理帮助他们完成订单 以下是一个屏幕截图: 当我检查元素时,Firebug中提供了以下内容: <div id="

我希望有人能帮我解答这个问题。我在网上做了很多研究,还没有找到任何特别的解决方案

在运行测试用例时,我有时会遇到无法在脚本中处理的HTML弹出窗口。它是非常随机的(根据客户浏览网站时的行为而定),可以在客户旅程中随时弹出。有时它根本不会弹出。当它出现时,只有一个条目在DOM中可见

基本上,它是一个livechat窗口(确切地说是LivePerson),建议客户如果愿意,可以通过代理帮助他们完成订单

以下是一个屏幕截图:

当我检查元素时,Firebug中提供了以下内容:

<div id="LPMcontainer-1483053256847-0" class="LPMcontainer LPMoverlay" style="margin: -143px 0px 0px -285px; padding: 0px; border-style: solid; border-width: 0px; outline-color: rgb(106, 159, 177); outline-width: 2px; font-style: normal; font-weight: normal; font-variant: normal; list-style: outside none none; letter-spacing: normal; line-height: normal; text-decoration: none; vertical-align: baseline; white-space: normal; word-spacing: normal; background-repeat: repeat-x; background-position: left bottom; background-color: transparent; border-color: transparent; width: 571px; height: 287px; cursor: pointer; display: block; z-index: 107158; position: fixed; top: 50%; bottom: auto; left: 50%; right: auto;">
 <div role="button" tabindex="0"><img src="https://www./content/dam/tcom/apps/live-person/live-person-chat-bundles-top.jpg" id="LPMimage-1483053256849-2" alt="" class="LPMimage" style="margin: 0px; padding: 0px; border-style: none; border-width: 0px; outline-color: rgb(106, 159, 177); outline-width: 2px; font-style: normal; font-weight: normal; font-variant: normal; list-style: outside none none; letter-spacing: normal; line-height: normal; text-decoration: none; vertical-align: baseline; white-space: normal; word-spacing: normal; position: absolute; z-index: 600; left: 0px; top: 0px;">
</div>
 <img src="https://www./content/dam/tcom/apps/live-person/live-person-chat-bottom.jpg" id="LPMcloseButton-1483053256847-1" alt="" class="LPMcloseButton" style="margin: 0px; padding: 0px; border-style: none; border-width: 0px; outline-color: rgb(106, 159, 177); outline-width: 2px; font-style: normal; font-weight: normal; font-variant: normal; list-style: outside none none; letter-spacing: normal; line-height: normal; text-decoration: none; vertical-align: baseline; white-space: normal; word-spacing: normal; position: absolute; cursor: pointer; z-index: 9999; left: 0px; top: 194px;" data-lp-event="close" role="button" tabindex="0">
</div>

它出现在所有浏览器中

我想用以下任何一种方法来处理它:

  • 完全停止加载(同样由于随机性)。 或
  • 当脚本正在执行时,一旦窗口出现,它就会按下“No Thank”(不感谢)按钮(在上述代码中为id=“LPMcloseButton-1483053256847-1”),然后继续执行其余步骤。请注意,id本质上是动态的,即每次都是唯一的

  • 非常感谢您的帮助。

    我认为解决这个问题的最简单方法是创建一个webdriver包装,对于您发送给webdriver的每个呼叫,首先检查对话框是否存在。如果存在,请关闭它,否则将操作发送到webdriver。

    它可能不是随机的。我为之编写自动化的一些站点也有类似的内容。经过调查,我发现对话框总是在30秒后弹出。。。这似乎是随机的,因为我可以在30岁的时候出现在任何一页上。经过更多的调查,我发现网站在寻找cookie,如果没有找到,就会触发对话框。我找到了对话框关闭后创建的cookie,并在脚本开始时创建了它,这样它就不会再打开了

    我建议您查找为该站点创建的现有cookie,并查看其中的内容。然后浏览到站点,等待对话框弹出,然后关闭它。看看有什么变化。。。如果cookie发生了变化或添加了新cookie,等等,那么在浏览网站之前,只需模仿这种行为即可


    注意:在我的例子中,我必须故意浏览到域中缺少的页面,例如somesite.com/someerrorpage,以便在不启动计时器的情况下创建cookie。然后我导航到该站点并继续脚本。

    非常感谢您的回复,卢卡斯。如果我能问一下,你能举个例子吗。我正在同时学习Java和Selenium,所以您需要再握住我的手:-)我恐怕对Java没有帮助。我只会做Python/RubyThanks,Jeff。这很容易知道。我会按照你的建议去做。我的直觉告诉我,这在我的情况下也可能奏效:-)