selenium弹出窗口切换,selenium切换到新窗口

  selenium弹出窗口切换,selenium切换到新窗口

  本文主要介绍了Selenium多窗口切换解决方案,通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面和边肖一起学习。

  在编写web端自动化测试用例的过程中,有没有遇到过窗口切换的情况,比如下面截图所示的产品列表页面,然后点击任意一个产品就切换到了产品详情页?

  此时浏览器中堆叠了两个窗口,如下图截图所示。

  或者打开两个浏览器窗口,如下图截图所示。

  两个窗口切换时大家的自动化测试脚本是怎么写的?

  还是不需要单独处理窗口切换?如果您使用selenium框架编写涉及窗口切换的自动化测试用例,您必须单独处理窗口切换。

  那么为什么要单独处理新窗口呢?因为我们通过浏览器驱动的对象访问指定的url,这个对象对应一个窗口X,当在窗口X中执行一个操作(比如点击)时,就会打开一个新的页面或者新的窗口Y。在这种情况下,selenium不做智能处理,而是把主动权交给脚本编写者来决定浏览器驱动的对象是模拟用户在window X还是y上的操作行为。

  然后,我们需要意识到如何将窗口切换到我们期望的窗口。让我们以文章开头的例子为例。我需要从产品列表页面切换到产品详情页面。大致有四种解决方案,分别是:遍历找到期望窗口然后切换,在判断期望窗口之前切换窗口,指定窗口开关,多条件判断期望窗口。接下来我需要解决一个手术前后如何找到窗口唯一标识的问题,就像人与人的区别就是身份证一样。当产品列表页和产品详情页出现时,如何区分这两个窗口?

  通过句柄,每个窗口都有一个唯一的标识句柄。如果有兴趣的读者可以把手柄打印出来看看,其实是一个字符串作为唯一标识。

  那么,在selenium framework web automation的情况下,我们如何获得控制权呢?通过getWindowHandle()方法获取当前页面的句柄。接下来,我们尝试遍历第一个解决方案以找到期望的窗口,然后切换以获得它。具体的代码实现逻辑是在点击一个商品之前获取窗口句柄,然后定位一个商品元素并调用click方法,再调用getWindowHandles()方法获取当前所有打开窗口的句柄集合,即商品列表页和商品详情页的句柄集合。接下来要做的是遍历句柄集合中的元素。在遍历的过程中,判断当前句柄是否与点击操作前的句柄相同。如果不一样,就切换到这个句柄对应的窗口。那么读者可能会问,这是哪种切换窗口的方法?是切换到()。这里有一个供读者使用的示例代码块。

  当读者平时编写涉及多窗口切换的测试用例时,通常可以通过这种方法来完成。当然,如果你确定点击后只会打开一个新窗口,你也可以使用指定的窗口来切换这个方案,代码的实现逻辑也比较简单。与第一种解决方案的区别是将句柄集转换为数组,然后通过指定数组的下标来切换窗口。下面是为您提供的实现代码块:

  如果多个重叠操作导致多个窗口被打开,也可以在遍历过程中采用先切换窗口再判断期望窗口的方案。该方案与方案的不同之处在于,首先进行窗口切换,然后判断当前窗口句柄是否与期望的窗口句柄一致。如果一致,遍历停止,仍然给你一个引用实现代码,如下所示:

  上面代码块中停止窗口切换的条件是当前切换窗口的title属性值是否是我期望的窗口的title属性值,如果是,则停止并继续切换窗口。这里有些读者可能会问,如果有多个窗口的title属性值相同,这个方案就不行了吧?可以,但是我们可以尝试替换判断条件,比如判断当前切换窗口的url是否与预期的url一致。这个判断是比较稳妥的,不同窗口对应的网址一般都不一样。但是如果前端代码版本更新,修改了URL,我们测试用例的这部分信息也需要做相应的修改。不要沮丧。还有其他备选方案,判断条件可以从一个变到多个。以上是多窗口切换的常用解决方案和应用场景,希望对广大读者有所帮助。有关Selenium多窗口切换的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望你以后能支持风行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: