Selenium WebDriver为开发人员服务

解码Dmitry Kostichev报告中包含Backend-stories //内置视频版本

如果您突然需要集成到第三方Internet资源上,而又没有时间弄清楚这一点,Selenium将为您提供帮助。Dmitry Kostichev在他的项目示例中讲述了如何在不离开服务的情况下自动执行浏览器中的工作。


大家好。我叫Dmitry,今天我将分享我在后端开发中使用Selenium的经验。这个是来做什么的?硒是自动化与某些Internet资源进行交互,消除填充某些数据的人为因素等所需的。为了进行开发,例如在Internet资源等上没有API的情况下,这可能是必要的。在我的项目示例中,任务是填写客户数据(在服务必须正确准备所有信息之前),然后在此站点(在本例中为MasterCard)中进行注册。



在进一步考虑该站点后,发现没有API可以帮助我们做所有事情。所有处理都是在JS脚本中执行的,其中没有清楚的内容,并且所有数据均已编码。已决定-为此目的尝试使用Selenium,也就是说,我们将把我们的整个服务固定在Selenium上,它将在某个确定的时刻进行此注册。

最后,什么是硒以及如何使用它? Selenium项目由一个库组成,该库与特定浏览器的Web驱动程序界面进行通信。幻灯片中显示了可用库和浏览器的列表。现在,我将展示它在我的项目中的大致运作方式。在帖子结尾

观看截屏视频或详细视频。

现在该服务将生成一个文件,立即将其上传到此站点,并检查所有内容是否已成功注册。实际上,他在这里进行粘贴,加载等操作。现在,他可能会抓住一切都会成功的事实。自动化速度足够快,并且不需要任何大量资源。显然,所有内容均已完美注册。

如何做所有这些?Selenium库具有以下基本命令:

  • 为特定的浏览器创建实例Web驱动程序;
  • 链接点击;
  • 使用元素:点击等

Web驱动程序使您可以像在普通浏览器中一样接收会话和cookie。您还可以更改它们并为自己定制。您也可以在页面上执行js脚本。有一个库扩展了Selenium本身的功能,称为Selenide。它的主要功能是隐藏实例驱动程序的创建。例如,我们看到我们只是调用了open命令,提供了某种链接,并且浏览器已经启动,因此无需进行任何配置。该库使用元素和一些其他预设扩展了工作。一切看起来都很方便,您可以快速找出并使用所有内容。

使用在线资源,最终使用Selenium时,有一些设计模式。其中之一是页面对象。其实质在于,我们在某个类中描述了所有这些元素。然后,我们可以重用它,并且看起来更容易。就像这样:我们调用open命令,为页面对象指定类,然后可以使用其所有方法,例如,处理元素。



我们通过xpath,css等选择器,通过HTML页面的DOM模型搜索元素。它们的主要区别(例如,xpath和css之间)是xpath可以“深入”以及上下变化。相反,css只会下降。也就是说,这些是最常用的选择器。



最终,我们需要直接使用浏览器,而Selenoid可以直接帮助我们。本质上,它是一个框架,用于通过浏览器控制这些容器的创建和修改。但是,它是专为已大量创建这些浏览器的已加载系统而设计的。在我们的情况下,这并不需要太多,仅使用容器本身即可。现在,我将说明如何在服务器上运行该功能。

实际上,页面的交互看起来像这样,这是一个相当线性的数据处理。在这种情况下,我分为几个步骤-过渡到页面。这是数据被填充并直接由文件下载的地方。原则上,一切都非常简单。这就是pageobject类的外观,非常让人联想到DTO。例如,在当前的PCSS Selectum情况下,我们仅描述元素。这是Selenide的语法。



为此,我们需要描述远程驱动程序以连接到Docker容器。要获得所需的主要设置是我们将使用的浏览器,实际上是该浏览器的分辨率和其他重要行。但是,为了使用docker容器,您还需要诸如无头模式之类的设置。也就是说,以其当前形式,它将在服务器上旋转。此模式将禁用浏览器中的图形,因此它将更快地工作并且占用更少的资源。

此外,它不会是Sandbox,在这种情况下会被Chromium安全性禁用,并且可以执行您自己的代码,JS或其他代码。为了使Chromium在Unix机器上正常工作并正确记录速度文件,需要第三个参数。实际上,第四点是我们上传文件所必需的。最重要的是,远程驱动程序具有一个标志,该标志使您可以通过删除驱动程序从运行应用程序的本地存储中下载文件。



现在,我将展示它如何与docker容器一起使用。下载Docker容器和应用程序本身。它也将以几乎相同的方式启动,也就是说,原则上不会有新的东西。只有在这里,我们才能以某种日志的形式看到交互。原则上,还可以监视它们,与它们一起工作等等。因此,您可以了解正在发生的交互。这是来自Chromium的docker容器的输出,直接位于浏览器所在的位置。



原则上,一切都可以与docker容器完美配合。另外,检查所有内容并成功完成注册。此外,在这种方法中会遇到哪些一般性问题?我除了无知外没有什么问题。像往常一样,在Docker容器中进行文件传输会做所有事情-改变音量。但是在这种情况下,如果仍要在本地运行,则需要为项目进行两种配置,但是事实证明,可以通过该标志配置远程驱动程序。他可以直接通过自己传输此文件,不需要其他手势。

您还必须遵循与我们合作的页面-在线资源。因为就我而言,这是另一个系统,与我的团队没有任何关系,所以还需要对其进行监视,通过日志监视等等。与浏览器一样,它会不断更新,您需要对其进行监控,支持可能会下降。好吧,原则上,您可以以某种方式配置日志,不会有任何问题。

最后,它变得容易了多少?在我看来,与知道js代码相比,我能够更快解决与该站点进行交互的问题。也就是说,了解Selenium和进行交互的速度要快于对数据进行编码并且不知道如何将其转码的事实。最主要的是发展速度。

检举影片-16.30起


All Articles