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

时间:2017-01-02 02:09:15

标签: selenium

我希望有人可以帮我查询。我在网上做了很多研究,但还没有找到任何具体的解决方案。

在运行我的测试用例时,我有时会遇到一个我无法在脚本中处理的HTML弹出窗口。它非常随机(很好地基于客户在遍历网站时的行为)并且可以在客户旅程中随时弹出。有时它根本不会弹出。当它出现时,只有一个条目在DOM内可见。

基本上,它是一个实时聊天窗口(确切地说是LivePerson),建议客户如果愿意,可以帮助他们完成订单。

以下是截图:

popup screenshot

当我检查元素时,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>

它出现在所有浏览器中。

我想通过以下任一方式处理它:

  1. 完全停止加载(再次由于随机性)。 OR
  2. 在执行脚本时,一旦窗口出现,它会按下“No thanks”按钮(上面代码中的id =“LPMcloseButton-1483053256847-1”),然后继续执行其余步骤。请注意,id本质上是动态的,即每次都是唯一的。
  3. 非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我说最简单的解决方法是创建一个webdriver包装器,为每次调用发送到webdriver,首先检查对话框是否存在。如果它存在,请关闭它,否则将操作发送到webdriver。

答案 1 :(得分:0)

它可能不是随机的。我编写自动化的一些网站也有这样的东西。经过一番调查后,我发现对话框总是会在30秒后弹出......它看起来很随意,因为当30秒钟出现时我可以在任何页面上。经过更多调查后,我发现该网站查找了一个cookie,如果找不到,则会触发该对话框。我发现在对话框关闭后创建的创建的cookie,并在脚本开始时创建它,以便它不再打开。

我建议您查找为该网站创建的现有Cookie,并查看其中的内容。然后浏览到该站点,等待对话框弹出,然后关闭它。查看更改内容......如果更改cookie或添加新cookie等,则在浏览网站之前模拟该行为。

注意:在我的情况下,我不得不故意浏览域中的缺失页面,例如somesite.com/someerrorpage,在没有启动计时器的情况下创建cookie。然后我导航到该网站并继续编写脚本。