不打开我当前浏览器的打开Selenium浏览器的方法

时间:2018-09-04 09:22:26

标签: java selenium google-chrome firefox serenity-bdd

我有以下情况。一旦开始硒测试,将打开浏览器窗口。由于我有很多测试,并且每天都要进行多次测试,因此,我不会让Selenium在当前浏览器(我正在工作的地方)的前面打开新的浏览器窗口,而是在后台打开它,所以不会别打扰我有可能吗?

PS 来阐明我为什么需要这样做-一天中的很多次,当我在当前浏览器中工作并且运行硒测试时,Selenium的浏览器窗口每个测试都突然打开,我可以突然关闭它,输入内容,等等。

我现在所拥有的:

enter image description here

2 个答案:

答案 0 :(得分:1)

软件测试自动化开始是一门艺术。您的测试床应为:

  • 配置了所有必需的软件 binaries
  • 测试执行必须在受控环境中执行,以优化性能。
  • 您的@Tests正在执行时,它应该不受人工干预的影响。
  • 尤其是当您的@Tests是基于的,而测试执行 InProgress 时,测试环境不应干预,因为:

    •   

      在最低级别上,actions class 的行为旨在尽可能接近地模仿具有实际输入设备的远端的行为,并且实现策略可能涉及例如将综合事件注入浏览器事件循环。因此,分派行动的步骤将不可避免地终止于特定于实现的领域。但是,某些内容可观察到的效果必须在实现之间保持一致。为了适应这一点,该规范要求远端执行特定于实现的动作分派步骤,以及事件及其属性的列表。此列表并不全面;特别是,输入源的默认操作可能会导致其他事件,具体取决于浏览器的实现方式和状态(例如,与焦点位于可编辑元素上时的键操作有关的输入事件,滚动事件等)。

  • 此外,

    •   

      由WebDriver API用户生成的激活触发器与真实用户与浏览器进行交互所生成的激活触发器必须是无法区分的。特别是,调度的事件会将isTrusted属性设置为true。分发这些事件的最可靠方法是在浏览器实现本身中创建它们。将特定于操作系统的输入消息发送到浏览器的窗口的缺点是,自动化的浏览器可能无法与用户意外修改输入源状态的方式隔离开。使用OS级可访问性API的缺点在于,浏览器的窗口必须聚焦,因此,多个WebDriver实例不能并行运行。

    •   

      OS级可访问性API的一个优点是,它可以确保输入正确地镜像用户输入,并在必要时允许与主机OS进行交互。但是,从机器利用率的角度来看,这可能会降低性能。

  • 此外,

    •   

      Robot Class用于生成本机系统输入事件,用于测试自动化,自运行演示以及需要控制鼠标和键盘的其他应用程序。 Robot的主要目的是促进Java平台实现的自动化测试。使用类生成输入事件与将事件发布到AWT事件队列或AWT组件不同,因为事件是在平台的本机输入队列中生成的。例如,Robot.mouseMove实际上将移动鼠标光标,而不仅仅是生成鼠标移动事件。

  • 最后,按照Internet Explorer and Native Events

    •   

      由于InternetExplorerDriver仅用于Windows,因此它尝试使用所谓的“本机”或OS级事件在浏览器中执行鼠标和键盘操作。这与对相同操作使用模拟JavaScript事件相反。使用本机事件的优点是它不依赖JavaScript沙箱,并且可以确保JavaScript事件在浏览器中正确传播。但是,当IE浏览器窗口没有焦点并且试图将鼠标悬停在元素上时,鼠标事件当前存在一些问题。

  • 浏览器焦点:

    •   

      挑战在于,如果窗口没有焦点,则IE本身似乎并不完全尊重我们向IE浏览器窗口发送的Windows消息(WM_MOUSEDOWN和WM_MOUSEUP)。具体来说,被单击的元素将在其周围收到一个焦点窗口,但单击不会被该元素处理。可以说,我们根本不应该发送消息。相反,我们应该使用SendInput()API,但是该API明确要求窗口具有焦点。 WebDriver项目有两个相互矛盾的目标。

    •   

      首先,我们努力尽可能模拟用户。这意味着使用本机事件,而不是使用JavaScript模拟事件。

    •   

      第二,我们不希望浏览器窗口自动聚焦。这意味着仅将浏览器窗口强制为前台是次优的。

结论

始终将测试环境开发环境分开,并且完全摆脱人工干预

答案 1 :(得分:1)

浏览器是显示在当前浏览器上还是在后台显示,取决于驱动程序的实现方式以及在浏览器之间的更改-它不取决于Selenium或Serenity。但是,我通常以无头模式在chrome中运行测试,从而完全消除了问题。