Selenium

Hire the Top 3% of 自由硒开发人员

Toptal是一个面向顶级Selenium开发人员的市场, engineers, programmers, coders, architects, and consultants. 顶级公司和初创公司选择Toptal Selenium自由职业者来完成他们的关键任务软件项目.

无风险试用,满意才付款.

Clients Rate 总硒开发人员4.5 / 5.0截至2023年12月20日,平均有123条评论

雇佣自由的Selenium开发人员和工程师

Papuna Gagnidze

自由Selenium开发人员

GeorgiaToptal Member Since November 21, 2019

Papuna是一名高技能的QA自动化和DevOps工程师,具有Linux系统管理和网络工程经验. 他拥有QA团队的领导经验和交付高质量端到端测试的技能. Papuna使用微服务和无服务器架构设计和实现了可扩展的系统.

Show More

Deniz Hamamcioglu

自由Selenium开发人员

TurkeyToptal Member Since December 12, 2018

Deniz在软件测试自动化方面有超过9年的经验, framework, 以及测试架构设计. 他领导和指导团队,并制定了有关测试的指导方针. Deniz是硒方面的专家, Cypress, Playwright, WebdriverIO, Protractor, 以及许多其他测试自动化技术和编程语言. 他善于沟通,对细节有敏锐的洞察力. 丹尼斯过去几年一直在远程办公, 提供跨大洲的专家指导.

Show More

Christina Lin

自由Selenium开发人员

CanadaToptal Member Since March 6, 2018

Christina是一名高级QA工程师,在测试自动化方面具有专业知识, test management, 以及对网络和移动应用程序的手动测试. 她在几个项目中使用Selenium WebDriver从头创建了测试自动化框架,并使用REST-assured和Postman自动化了API测试. 在私营和公共部门都有工作经验, 克里斯蒂娜曾与大型, medium-size, 小型创业公司.

Show More

Jovana Rajkovic

自由Selenium开发人员

SerbiaToptal Member Since March 22, 2018

在过去的七年里, Jovana是一名QA工程师,与不同的QA团队合作,在多种类型的应用程序上进行复杂的功能测试(手动和自动化). 她对寻找漏洞充满热情,是一名勤奋的团队成员,热爱学习. Jovana在压力下茁壮成长,这可以从她成功处理截止日期和产品交付的历史中看出.

Show More

Enzo Heredia

自由Selenium开发人员

ArgentinaToptal Member Since April 19, 2019

Enzo是一名工程师,在QA/QA自动化方面拥有超过12年的经验, 使用最新的技术和最高的行业质量标准自动化web ui, Rest APIs, and back-end services. 他对创业公司和大公司都很熟悉, 要么成为第一个QA成员,要么加入各种规模的团队. 他也有定义过程的经验, procedures, 和工具才能达到最好的质量.

Show More

Andrej Skeledzija

自由Selenium开发人员

CroatiaToptal Member Since April 24, 2019

Andrej是一名经过认证的测试(QA)软件工程师,在软件测试方法方面拥有超过15年的经验, 测试自动化的最佳实践, 以及各种测试工具. 他通过激情、承诺和专业知识来实现项目目标. Andrej在具有多个集成点和紧迫截止日期的项目中具有复杂测试工作的实际经验.

Show More

Leonardo Amaral

自由Selenium开发人员

BrazilToptal Member Since May 30, 2019

Leonardo拥有超过十年的敏捷测试软件测试经验, load testing, continuous delivery, 主要是测试自动化. 他能够使用各种各样的软件质量工具和环境. 李奥纳多获得了测试人员基础水平和测试人员高级水平的认证,并拥有软件分析/开发的技术许可证和商业管理专业的研究生学习.

Show More

Jacek Maciąg

自由Selenium开发人员

PolandToptal Member Since September 20, 2019

Jacek是一个专注和严谨(一个完美主义者)的测试人员,在后端和前端都有经验. 他主要专注于Java,但他也喜欢学习和探索新技术. Knowledge is power.

Show More

Thiago Secomandi Galdino

自由Selenium开发人员

BrazilToptal Member Since October 16, 2019

Thiago是一名拥有12年以上经验的QA工程师,他精通功能和回归测试,使用c# /Java和Selenium进行UI测试,使用RestSharp (c#)/RestAssured (Java)进行API测试. 他使用过几种应用程序类型, 是否能够建立一个强大的背景, 并与团队的业务和开发人员进行良好的沟通. 他解决问题的意志是他成功的关键之一.

Show More

Fayaz Abdul

自由Selenium开发人员

United KingdomToptal Member Since October 24, 2019

Fayaz是一名DevOps工程师和架构师,具有设计端到端解决方案的经验. 他对多个AWS拥有丰富的云和基础设施专业知识, Azure, 和谷歌云认证. 他专门研究监控工具(ELK), Zabbix, 普罗米修斯)和Python自动化, Ansible, Terraform, and Docker. Fayaz实现了Jenkins CI/CD管道来构建, test, 部署大型应用程序, 包括microservices, with zero downtime.

Show More

Igor Grinberg

自由Selenium开发人员

CanadaToptal Member Since November 26, 2019

Igor是一位经验丰富的自动化架构师,具有成熟的领导能力. 热衷于通过自动化策略提高组织效率, 他能够同时指导多个项目,并在质量和速度上保持高标准. Igor的经验包括Java方面的专业知识, JavaScript, Python, Selenium, Appium, Jest, Jasmine, NightwatchJS, Karate API, and UI.

Show More

现在注册以查看更多资料.

Start Hiring

A Hiring Guide

雇用优秀的Selenium开发人员指南

测试web应用程序和站点可能是一项艰巨的任务, 特别是如果你没有合适的工具. Selenium旨在尽可能地简化这一过程, 并且拥有一个专业的Selenium自动化工程师可以极大地帮助您的项目开发.

Read Hiring Guide
Trustpilot
THE TOPTAL ADVANTAGE

在无风险试用后,98%的Toptal客户选择雇用我们的人才.

Toptal的筛选和匹配过程确保卓越的人才与您的精确需求相匹配.

Start Hiring
Toptal in the press

... 允许公司快速组建具有特定项目所需技能的团队.

尽管对程序员的需求在不断增加,但Toptal对自己近乎常春藤联盟级别的审查感到自豪.

Our clients
为游戏制作应用程序
Conor Kenney
为游戏制作应用程序
构建一个跨平台的应用程序,在全球范围内使用
Thierry Jakicevic
构建一个跨平台的应用程序,在全球范围内使用
引领数字化转型
Elmar Platzer
引领数字化转型
挖掘实时数据将改变行业的游戏规则
挖掘实时数据将改变行业的游戏规则
Testimonials

没有Toptal就不会有Tripcents. Toptal Projects使我们能够与产品经理一起快速发展我们的基金会, lead developer, and senior designer. 在60多天的时间里,我们从概念到Alpha. 其速度、知识、专业知识和灵活性是首屈一指的. Toptal团队是tripcents的一部分,就像tripcents的任何内部团队成员一样. 他们像其他人一样贡献并拥有开发的所有权. 我们将继续使用Toptal. 作为一家初创公司,它们是我们的秘密武器.

Brantley Pace, CEO & Co-Founder

Tripcents

我对我们与Toptal的合作经验非常满意. 和我一起工作的专业人员在几个小时内就和我通了电话. 在和他讨论了我的项目后,我知道他就是我想要的候选人. 我立即雇用了他,他没有浪费时间就完成了我的项目, 甚至通过添加一些很棒的设计元素来增加我们的整体外观.

Paul Fenley, Director

K Dunn & Associates

与我合作的开发者都非常出色——聪明、有动力、反应灵敏. 过去很难找到高质量的工程师和顾问. Now it isn't.

瑞安·洛克菲勒首席执行官

Radeeus

Toptal立即理解了我们的项目需求. 我们遇到了一位来自阿根廷的杰出自由职业者, from Day 1, 沉浸在我们的行业中, 与我们的团队无缝融合, 理解我们的愿景, 并产生了一流的结果. Toptal使与高级开发人员和程序员的联系变得非常容易.

Jason Kulik,联合创始人

ProHatch

作为一家资源有限的小公司,我们不能犯代价高昂的错误. Toptal为我们提供了一位经验丰富的程序员,他能够立即投入工作并开始做出贡献. 这是一次很棒的经历,我们会马上再来一次.

斯图尔特·波克尼校长

现场专用软件解决方案

我们使用Toptal聘请了一位具有丰富的Amazon Web Services经验的开发人员. 我们面试了四位候选人,其中一位非常符合我们的要求. 这个过程迅速而有效.

Abner Guzmán Rivera,首席技术官和首席科学家

Photo Kharma

Sergio是一个很棒的开发者. 一流,反应迅速,工作效率高.

Dennis Baldwin,首席技术专家和联合创始人

PriceBlink

和Marcin一起工作是一种乐趣. He is competent, professional, flexible, 并且非常迅速地理解需要什么以及如何实现它.

André Fischer, CTO

POSTIFY

我们需要一位能立即开始我们项目的专业工程师. 西马纳斯的工作超出了我们的预期. 不需要采访和追踪专家开发人员是一种非常节省时间的方法,并且让每个人都对我们选择切换平台以使用更健壮的语言感到更舒服. Toptal使这一过程变得简单方便. Toptal现在是我们寻求专家级帮助的首选之地.

Derek Minor, Web开发高级副总裁

Networld Media Group

Toptal的开发人员和架构师都非常专业,也很容易共事. 他们提供的解决方案价格合理,质量上乘,缩短了我们的发行时间. Thanks again, Toptal.

Jeremy Wessels, CEO

Kognosi

我们与Toptal合作非常愉快. 他们为我们的应用程序找到了完美的开发人员,让整个过程变得非常简单. 它也很容易超出最初的时间框架, 我们可以在整个项目中保持同一个承包商. 我们强烈推荐Toptal,因为它可以快速无缝地找到高素质的人才.

Ryan Morrissey, CTO

应用商业技术有限责任公司

我对Toptal印象深刻. 我们的开发人员每天都和我交流,他是一个非常强大的程序员. 他是一个真正的专业人士,他的工作非常出色. 5 stars for Toptal.

Pietro Casoar, CEO

Ronin Play Pty Ltd

与Toptal合作是一次很棒的经历. Prior to using them, 我花了相当多的时间面试其他自由职业者,但没有找到我需要的. 在与Toptal合作后,他们在几天内就为我找到了合适的开发者. 与我一起工作的开发人员不仅提供高质量的代码, 但他也提出了一些我没有想到的建议. 我很清楚,阿莫里知道自己在做什么. Highly recommended!

George Cheng, CEO

Bulavard, Inc.

作为一名Toptal合格的前端开发人员,我还经营着自己的咨询业务. 当客户来找我帮忙填补他们团队中的关键角色时, Toptal是我唯一愿意推荐的地方. Toptal的所有候选人都是精英中的精英. Toptal是我在近5年的专业在线工作中发现的性价比最高的网站.

Ethan Brooks, CTO

Langlotz Patent & Trademark Works, Inc.

在希格尔的早期, 我们需要一流的开发者, at affordable rates, in a timely fashion. Toptal delivered!

Lara Aldag, CEO

Higgle

Toptal能让你轻松找到合适的人选,让你放心,因为他们有能力. 我肯定会向任何寻找高技能开发人员的人推荐他们的服务.

Michael Gluckman,数据经理

Mxit

Toptal将我们的项目与最优秀的开发人员快速匹配的能力非常出色. 开发人员已经成为我们团队的一部分, 我对他们每个人所表现出的敬业精神感到惊讶. 对于那些希望与最好的工程师远程工作的人来说,没有比Toptal更好的了.

Laurent Alis, Founder

Livepress

Toptal让寻找合格的工程师变得轻而易举. 我们需要一个有经验的ASP.. NET MVC架构来指导我们的启动应用程序的开发, Toptal在不到一周的时间里为我们找到了三位优秀的候选人. 在做出我们的选择后,工程师立即在线并开始工作. 这比我们自己发现和审查候选人要快得多,也容易得多.

Jeff Kelly,联合创始人

Concerted Solutions

我们需要一些Scala的短期工作,Toptal在24小时内为我们找到了一位优秀的开发人员. 这在其他平台上是不可能实现的.

Franco Arda,联合创始人

WhatAdsWork.com

Toptal为快速发展和规模化的企业提供不妥协的解决方案. 我们通过Toptal签约的每一位工程师都迅速融入了我们的团队,并在保持惊人的开发速度的同时,将他们的工作保持在最高的质量标准.

Greg Kimball,联合创始人

nifti.com

如何通过Toptal招聘Selenium开发人员

1

与我们的行业专家交谈

Toptal的工程总监将与您一起了解您的目标, technical needs, and team dynamics.
2

与精心挑选的人才一起工作

几天之内,我们将为您的项目介绍合适的Selenium开发人员. 平均匹配时间在24小时以下.
3

绝对合适

与新的Selenium开发人员一起试用一段时间(只在满意的情况下付费), 在订婚前确保他们是合适的人选.

寻找拥有相关技能的专家

在我们的人才网络中访问大量熟练的开发人员,并在48小时内雇用最优秀的3%.

FAQs

  • Toptal Selenium开发人员有何不同?

    At Toptal, 我们对Selenium开发人员进行了彻底的筛选,以确保我们只为您匹配最优秀的人才. Of the more than 200,每年有5000人申请加入Toptal网络, 只有不到3%的人能达标. 你将与工程专家(而不是一般的招聘人员或人力资源代表)一起了解你的目标, technical needs, and team dynamics. 最终的结果是:经过专家审查的人才从我们的网络,定制匹配,以满足您的业务需求.

  • 我可以在不到48小时内通过Toptal雇佣Selenium开发人员吗?

    取决于可用性和进度, 您可以在注册后48小时内开始与Selenium开发人员合作.

  • Toptal Selenium开发人员的无风险试用期是什么?

    我们确保您和您的Selenium开发人员之间的每次约定都从长达两周的试用期开始. 这意味着你有时间确认订婚是否成功. 如果你对结果完全满意, 我们会给你开时间单的,你愿意多久我们就多久. 如果您不完全满意,我们不会向您收费. From there, 我们要么分道扬镳, 或者我们可以为您提供另一位可能更合适的专家,我们将与他开始第二轮谈判, no-risk trial.

Share
Selenium

如何聘请优秀的Selenium开发人员

Selenium项目源于Jason Higgins的日常工作, Paul Gross和Jie Tina Wang在2004年为ThoughtWorks工作过. 同时向他们的同事展示Selenium, 保罗·哈曼特看到了巨大的潜力, 并建议将Selenium开源,并使其以驱动模式工作,从而使其他编程语言可以访问它. 因为它从一开始就是开源的, 许多人的贡献使它成为今天强大的web自动化工具.

硒IDE也发挥了很大的作用,使 Selenium project 和它一样流行和广泛. 由Shinya Kasatani创建的Firefox插件, 该工具使用户能够记录浏览器操作,然后在浏览器中以一组Selenium核心命令的形式播放. 然后,他们可以将这些操作保存到一个文件中,并在以后作为一个自包含的脚本重用它们.

硒:不仅仅是安全网

硒:不仅仅是安全网

版本1被证明是一个有趣的框架, 这让很多人对自动化测试过程有了更多的认识. 版本2在此基础上构建,将WebDriver作为接口引入,并即将成为 W3C standard. Selenium的WebDriver架构也被用作移动应用测试框架的起点,例如 Appium, Selendroid and iosdriver.

Selenium Library

Selenium使web应用程序和站点的自动化成为一个简化的过程. 它使用在HTML4/HTML5/CSS标准中找到带有选择器的网页元素的方法. That way, 使用一些聪明的脚本可以减轻手动测试web应用程序的负担. Selenium WebDriver接口可以使用任何现代浏览器,并使用HTML/CSS选择器自动化网站和应用程序,这些选择器以类似于实际用户使用浏览器的方式进行交互-只是快一点.

硒实际上由三个独立的成分组成:

  • Selenium WebDriver (Selenium 2)
  • Selenium IDE
  • 硒遥控器

Selenium WebDriver知识是所需的关键技能, 使用Selenium驱动程序编写测试是我们正在寻找的. 硒遥控器是Selenium Server的一部分, 允许Selenium浏览器测试在专用服务器网格上并行运行的组件, 并且只是构建自动化系统的附加组件.

虽然Selenium IDE非常适合新用户,并且可以快速尝试Selenium或被测系统的实际工作方式, 它不能被认为是一种可以完全完成工作的工具, 因为对于一个有很多功能的大项目来说,需要以逻辑和可读的方式组织大量的测试. 要创建Selenium自动测试, coding skills, architectural skills, 技术知识也是必需的, 任何开发过程都是如此.

问题与答案

Selenium被设计成一个易于使用的框架, 这样技术经验较少的人就可以使用它来满足日常需求. 任何人都可以使用Selenium IDE编写脚本,甚至不需要离开浏览器. 但实际上,在可以使用它的人之间不仅仅只有一条细微的界限, 一个擅长于此的人, 以及精通Selenium开发和测试过程的人. 在大多数情况下,Selenium开发人员需要的不仅仅是编码人员和数据驱动人员. 在接下来的章节中,我们将看到在选择完美的候选人时可以评估哪些技能.

自动化还是不自动化

尽管关于自动化覆盖范围的争论仍在继续, 没有人能否认Selenium作为web自动化事实上的标准的身份,以及它对测试世界的巨大影响. 一些组织已经为自动化而疯狂, 并且不雇用没有自动化和开发背景的人. QA Developers, 测试自动化工程师, 软件工程师测试(SET)或其他组织的称呼, 如今,将各种工具(包括Selenium)授权到被测系统的上下文中是非常需要的, 只要开发周期如此之快,这种趋势就会持续下去, 随着网络软件变得越来越复杂.

还会出现另一个问题:是否需要一个全职的专门的Selenium开发人员? 有人可能会说,编写应用程序及其特性代码的开发人员也可以使用Selenium创建自动化测试. 在很多情况下,这可能是真的.

这个问题没有直接的答案, 因为这取决于很多不同的因素,比如项目规模, solution complexity, manpower, and deadlines. 如果一个web开发人员需要花一半的工作时间来自动化和编码测试, 这并不是真正的高效. 有经验的专门的Selenium开发人员将花费更少的时间进行自动化, 从一开始就知道如何以最好的方式组织代码, 还将创建一个测试的质量层. 他们还可以提供见解和技巧,使这些功能更加用户友好和高效. 覆盖在没有自动化的情况下不容易测试的边缘情况和情况,可以帮助为最终产品创建另一层安全性. 这取决于你对产品的最终质量有多坚定,并从第一天起就让它发挥应有的作用.

问:自动化一个项目及其所有特性是否总是合适的?

然而,不可否认的是,自动化在日常开发中是非常有用的, 有些情况下自动化是不合适的, or even possible. 同时,考虑到 test pyramid, 有太多的自动化UI测试并依赖于它们是不明智的, 由于所有主要的应用程序特性都必须在单元之外的级别上进行覆盖, services). 因此,只有关键的应用程序特性才需要使用UI覆盖率进行测试. 一些次要的应用程序功能可以在无人参与的情况下通过主要应用程序工作流进行测试,并对这些组件使用特定的单元测试.

QA, Developer or Both?

问:作为开发者或QA,你是如何看待自己的?

你要找的既不是严格意义上的QA也不是开发人员. 在一个不断发展的世界里, 您正在寻找一个拥有适合敏捷开发理念的广泛技能的人. 对于Selenium开发人员来说尤其如此, 也许比你团队中的其他角色更重要. 他们当然不是传统的QA, and most of the time, 他们没有产生任何值得通过公司大门发布的代码. 他们所做的是提供支持代码,这对于减少测试时间和费用至关重要, 并给予产品远远超出常规测试工作的支持.

尽管如此,他们还是需要具备QA技能. 创建有效且有意义的测试场景, testing edge cases, 然后将它们编码为脚本应该是他们日常工作的一部分. Selenium开发人员需要理解复杂的业务逻辑和规则, 因为这是使自动化工作真正有价值的要求之一.

Selenium开发人员不应该担心手工测试会弄脏自己的手, 因为让我们面对现实吧, 你可以自动化很多, 但你不必把一切都自动化. 在自动化测试效率不高以及人类判断提供的信息比计算机所能提供的更多的情况下,手动测试仍然是非常有效的. 计算机在执行方面很好,但在判断方面不行. 所以让人类做他们最擅长的事. 自动化从手工测试结束的地方开始. 使用Selenium WebDriver的自动化始终是手工工作的继承者, 因为它进一步验证了在手动测试应用程序时做出的正确判断.

Language-gnostic

问:在编写Selenium测试时,您更喜欢使用哪种语言?

Selenium WebDriver被移植到许多流行的语言中, 所以如果你正在寻找一个硒专家, 你不必太担心他使用的语言. 当然,除非它对实际业务或公司政策至关重要. 驱动程序库可用于Java(本机),c#, Python, Ruby和JavaScript. 对于经验丰富的Selenium开发人员来说,切换到任何一种不同的语言应该是非常容易的. 驱动程序库的api几乎是相同的, 将重点放在语言的最佳编码实践上.

让我们看看这些差异在实践中是如何表现的:

Java:

import org.junit.AfterClass;
import static org.junit.Assert.*;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

公共类TestToptal {
    私有静态FirefoxDriver驱动;

    @Before
    初始化edriver (){
        driver = new FirefoxDriver();
    }

    @Test
    公共无效testTitle(){
        driver.get("http://etga.ngskmc-eis.net");
        assertEquals(driver.getTitle(),“雇佣前3%的自由开发者、设计师和其他技术人才.");
    }

    @After
    关闭浏览器(){
        driver.quit();
    }
}

Ruby:

需要“selenium-webdriver”
需要的小型试验/自动运行

class TestToptal < Minitest::Unit::TestCase
  def setup
    @driver = Selenium::WebDriver.for :firefox
  end

  def test_title
    @driver.get 'http://etga.ngskmc-eis.net'
    assert_equal @driver.标题:“雇佣自由职业者中最优秀的3%的开发者、设计师和其他技术人才."
  end

  def teardown
    @driver.quit
  end
end

Python:

import unittest
从selenium导入webdriver

类ToptalTest (unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()

    def test_title(自我):
        self.driver.get("http://etga.ngskmc-eis.net")
        self.assertEqual(
            self.driver.title,
            “雇佣最优秀的3%的自由开发者、设计师和其他技术人才.")

    @classmethod
    def tearDownClass (cls):
        cls.driver.quit()

正如你自己所见, 差别很小, 并期望实际需要编写的代码量.

HTML + CSS

事实上,一个人可以使用Selenium WebDriver自动化web页面或应用程序测试,而不需要任何HTML或CSS技能. Selenium可以提供选择器和操作规范,这些都可以直接使用. 但是,如果候选人具备HTML和CSS的知识和理解,则有很大的优势.

问:你如何评价你的HTML & CSS knowledge?

即使是中级HTML和CSS知识,对于处理被测web应用程序或站点的Selenium开发人员来说也是有益的. 特别是当它的加价比较重或比较复杂的时候.

了解这两种技术的另一个好处是,它允许Selenium开发人员以更直接的方式帮助前端开发人员, 或者甚至通过代码审查. 从许多组织的经验来看, 让项目成员参与到彼此的代码中被证明对整个开发过程是有益的.

Q: What is CSS? 如何在测试自动化环境中使用它?

CSS或层叠样式表是一种向终端客户端描述HTML表示的声明性语言. 使用CSS,普通HTML页面被呈现为样式优美的文档.

虽然它们对于实际的测试自动化可能不是那么重要, Selenium开发人员对CSS的了解可以帮助他们选择更好的选择器. 如果需要,它们还可以为高级断言使用CSS属性. 它们可以帮助识别写得不好的CSS,以便前端开发人员可以修复它们.

问:请简单描述一下HTML4的页面布局.

每个网页至少包含一个标题和一个正文标签,这些标签被包装在HTML根元素中. 而head保存一些特定于页面的元数据, 所有与实际用户界面相关的内容都在body标签中, 并且对最终用户可见.

Selenium开发人员将在body标签中度过他们的编程生涯, 找出定位元素和执行各种操作和断言的最佳方法.

问:从测试自动化的角度来看,如果一个页面使用HTML5,会有什么不同吗?

No. HTML5使用一组特定的标签,以获得更加标准化和注释良好的页面布局, 但是这对实际的测试自动化过程几乎没有影响. 虽然,这也取决于实际被测试的web应用程序.

Q: What is HTML DOM?

Domain Object Model, or in short DOM, 是HTML页面的编程接口吗, 并且在每次加载页面时构造. 它是一个树,将页面的元素表示为具有自己属性的对象, 操作方法和它们所响应的事件. 通过使用HTML对象模型,可以使用JavaScript对页面及其元素进行操作.

高级Web浏览器知识

Selenium开发人员不仅要知道如何编写代码,这一点非常重要, 但也知道浏览器的功能. Firefox, Chrome, IE (Edge), Safari等., 它们在页面加载方面都有细微的差别, 元素呈现和处理页面的内部机制. 一个人必须了解他们所有的怪癖,才能使这些工具屈从于他们的需要. Selenium开发人员不需要完全达到开发人员的知识水平, 但是他们需要比普通用户更了解浏览器. 这包括使用浏览器提供的工具, 例如开发者控制台, Network Traffic, 性能工具等等.

For example, Chrome有配置文件, 哪些可以为开发人员带来优势, 作为在每次运行之前设置测试集的一种方式, 比如在网站上加载图片, 使用不同的目录进行下载, 关闭高级或标准浏览器功能. Firefox也是如此,它的武器库中有一组类似的隐藏和不那么隐藏的选项. 掌握这些将使开发人员作为自动化工程师的生活更加轻松, 并且对于在各种场景中测试应用程序非常重要.

今天的浏览器就像迷你操作系统(有些人甚至倾向于这样看待它们),提供了很多功能, 大多数普通电脑用户都将它们视为软件中最重要的部分, 甚至不知道他们不是不可或缺的一部分. 掌握它们,就能过上更快乐的自动化生活.

JavaScript是患难中的朋友

如果候选人懂JavaScript,这也是一个很大的优势. 在某些情况下,JavaScript可能是自动化部分应用程序工作流的唯一方法. 在95%的情况下,这是不需要的. 但它仍然可以是一个区分因素,特别是如果项目是JavaScript繁重的. 因为可以在Selenium WebDriver的上下文中运行或触发JavaScript, 使其成为自动化解决方案的一部分是一个直截了当的过程.

许多现代项目几乎只使用JavaScript进行后端(服务器端)和前端(客户端)开发, 掌握这些知识可以让Selenium开发人员与其他开发人员保持同步.

Selenium开发人员还可以帮助检查JavaScript代码,帮助修复bug或在bug出现之前找到它们. 这对你的团队及其成功来说是无价的.

问:如何使用Selenium Driver调用JavaScript对象或方法?

可以使用Java中的JavascriptExecutor类在驱动程序的上下文中直接调用JavaScript, 在其他语言中也是如此. 脚本可以同步或异步执行:

// ...
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.firefox.FirefoxDriver;
// ...

WebDriver driver = new FirefoxDriver();
JavascriptExecutor js;
if (driver instanceof JavascriptExecutor) {
    js = (JavascriptExecutor)driver;
}
js.executeScript(“返回文档.getElementById (myid);”);
// ...

This way, 您可以访问整个HTML DOM,也可以调用已经是页面一部分的任何脚本或对象.

通用编程知识

Selenium IDE使Selenium对于任何想要快速进入web自动化的初学者来说都非常简单. 而是为了制作高效可靠的脚本, 将代码组织成可重用的单元要好得多. 虽然可以使用Selenium IDE来记录和回放操作, 通过敏捷开发来维护代码是相当麻烦的, 很多特性都是快速而频繁地改变的. 所以,如果你正在寻找一个专家,你正在寻找的人谁也是一个优秀的开发人员.

问:你应该如何组织自动化代码?

如果使用Page Object模式组织Selenium测试代码,这也是一个很大的优势, 这将在几段之后讨论. 与支持代码解耦的测试代码可以进一步提高可维护性. 这里有一些指导方针:

  • 让自定义支持库远离实际的测试代码
  • 创建可在测试之间重用的工作流助手方法
  • 使用页面对象来组织代码
  • 删除旧的不相关代码
  • 在添加新功能的同时删除已经覆盖的测试

由于自动化测试的变化非常快,因此建议随着开发的进行而快速更改它.

封装测试的测试库

组织测试代码的很大一部分实际上涉及到使用测试单元/规范/特性库,这些库将使测试断言和检查成为工作流的一部分. 没有它们也可以执行实际的测试脚本, 但它们确实提供了额外的控制水平, 特别是当项目使用CI(持续集成)服务器作为开发过程的一部分时.

问:你对测试库有什么经验?

测试库的选择将根据实际使用的编程语言而有所不同. 但是它们有一个共同点:断言Selenium执行的操作产生了预期的结果, 它是一个正在显示的web元素, 正在呈现的文本或浏览器界面上可能发生的其他任何事情. 按语言划分的一些最流行的库是:

  • Java: jUnit, TestNG
  • Ruby: rspec, minitest
  • Python: py.test, unittest, nose

问:你有编写Cucumber功能的经验吗?

Cucumber是一个处理特性的有趣库, 测试以类似于业务规范的方式指定,即使没有技术知识的人也可以阅读和理解:

场景:下载业务报表
  鉴于我被任命为经理
  当我搜索“最新报告”时
  然后报告列表应该包含“从最后一天的报告”

This way, 测试变得更具交流性, 而编程实现则被排除在业务需求之外. 如果您有许多想要参与测试的涉众,那么这是一项再强调不过的技能, 以及那些没有实际的技术技能来自己解释代码的人.

Page Object Pattern

问:你使用过页面对象吗? How are they useful?

在Java Selenium库版本2中引入, 页面对象模式是将代码组织到可重用类中的好方法. 考虑下面的部分代码,这是自动化total网站应用程序的代码:

driver.findElement(By.CssSelector(“div [data-role = ' custom_field '] ")).click();
driver.findElement(By.CssSelector(“div[数据值=“开发人员”]”)).click();
driver.findElement(By.Id("talent_email")).sendKeys("selenium.dev@ngskmc-eis.net");
driver.findElement(By.Id (" talent_password ")).sendKeys(“我的密码”);
driver.findElement(By.Id (" talent_password_confirmation ")).sendKeys(“我的密码”);
driver.findElement(By.Id (" talent_full_name ")).sendKeys(“硒Dev”);
driver.findElement(By.Id("talent_skype")).sendKeys("selenium.dev");
driver.findElement(By.Id (" save_new_talent ")).click();

It does the work, 但是,如果工作流因任何原因发生变化,它不太可能被重用或容易扩展. 使用页面对象模式, 这个简单的测试变成了一个高度可重用的类,可以在多个测试中初始化和使用:

package com.ngskmc-eis.netmon.pageobjects;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

公共类signupage {
    私有最终WebDriver驱动;

    private By talentDiv = By.CssSelector(“div [data-role = ' custom_field ']”);
	private By developerDiv = By.CssSelector(“div[数据值=“开发人员”]”);
    private By designerDiv = By.CssSelector(“div[数据值= '设计']”);
    private By emailField = By.Id("talent_email");
    private By passwordField = By.Id(“talent_password”);
    private By passwordConfirmField = By.Id(“talent_password_confirmation”);
    private By fullNameField = By.Id(“talent_full_name”);
    private By skypeNameField = By.Id("talent_skype");
    private By saveTalentButton = By.Id(“save_new_talent”);

	公共signupage (WebDriver驱动){
		this.driver = driver;

        if (!verifyBasePageTitle) {
            抛出新的IllegalStateException("这不是注册页面");
        }
	}

	getPageTitle() {
		String title = driver.getTitle();
		return title;
	}

	公共布尔verifyBasePageTitle() {
		字符串expectedPageTitle="顶级开发者和设计师的独家访问| Toptal";
		return getPageTitle().包含(expectedPageTitle);
	}

    public signupage selectTalent(String talent) {
        driver.findElement (talentDiv).click();
        if talent.equals(developerValue.text) {
            driver.findElement (developerDiv).click();
        } else if talent.equals(designerDiv.text) {
            driver.findElement (designerDiv).click();
        } else {
    	     driver.findElement(By.CssSelector(String.格式(" div[数据值= ' % s ']”,人才)).click();
        }
        return this;
    }

    applyAsDeveloper(字符串电子邮件, String password, String fullName, String skypeName) {
        driver.selectTalent(“开发人员”);
        driver.findElement (emailField).sendKeys(email);
        driver.findElement (passwordField).sendKeys(password);
        driver.findElement (passwordConfirmField).sendKeys(password);
        driver.findElement (fullNameField).sendKeys(fullName);
        driver.findElement (skypeNameField).sendKeys(skypeName);
        driver.findElement (saveTalentButton).click();
        返回新的SignUpStepTwo(driver);
    }
}

直接想到的是,当用户使用页面对象时,页面对象作为浏览器中实际发生的事情的精确对应物是最有意义的, 就像一个驱使页面追求目标的思想.

不同的语言有不同的Page Object库, 但它们都有一些共同点:它们都在对页面上的所有元素进行逻辑放置, 并且还提供了方便的方法来访问该页面上出现的任何功能. 它们也可以用作路由器, 其中页面对象是在web应用程序的动作和链接在一个逻辑结构,是相同的系统在测试后创建的. 然后,您可以将它们与等待状态结合起来,以创建一个复杂的机制,该机制将驱动您的测试,并包含对执行重要的所有逻辑.

尽管现在有很多网站和web应用程序使用单页原则来呈现内容, 在大多数情况下,页面对象仍然是有效的,至少以逻辑和干净的方式组织web元素.

问:页面对象应该是真实页面的精确副本(所有元素作为单独的对象)?

No. 因为通常每个页面上都有很多元素, 只有那些创建工作流自动化所必需的元素应该在Page Object中建模. 把每个元素都放在页面上实际上是适得其反的,因为它使页面对象变大了, clumsy, 很难维护,几乎无法使用.

问:是否建议直接在页面对象中做断言?

It should be avoided. Page Objects做得最好的是通过一个干净的API保持和公开页面结构和页面的内部逻辑. 可以让Page Object验证元素的某些状态,但它不应该直接断言.

Selenium Specifics

问:哪些元素选择器被认为是最优的?

创建用于测试某些功能的Selenium驱动程序脚本非常容易. 以后更改和支持脚本代码变得更加困难, 要么使用过于依赖页面结构的复杂选择器, 或者在开发测试脚本时不遵循页面对象模式. 最好的选择是那些最有特色的, and at the same time, 随着应用程序的增长和布局的变化,最容易遵循.

For example:

driver.findElement(By.CssSelectors("div.some-section div.my-section > a#some-id"))

当你只能做简单的选择时:

driver.findElement(By.Id("some-id"))

这也引出了另一个问题:对于页面元素的定位器来说,什么样的选择器才是最好的? 而务实的人会说,任何有效的东西都足够好, 这里有一个最好遵循的等级制度:

id > name > class >= css_selector > tag > text > xpath

这也是有争议的, 但总结一下背后的逻辑, id是每个页面最独特的定位器,因此应该首先使用. 元素名称也可以非常独特. CSS类也很棒, 特别是在使用独特的CSS类形成的网页上.

有时非常希望使用实际链接文本作为选择器, 因为测试可以在选择页面元素时直接在界面上捕获任何拼写错误或功能问题.

问:简要解释一下高级CSS选择器的用法.

当一切都失败时, 高级CSS选择器是在页面上查找元素或元素组的最佳选择. 下面是一些最常用的:

  • Direct child: div > a
  • 子或子:div a
  • 具体id: div#myid a
  • Specific class: div.myclass a
  • 特定匹配:ul#mylist li:n -child(2)

CSS选择器也可以用于搜索页面的内容,但这是一个单独的主题.

问:如果有两个元素没有任何区别,你该怎么办?

偶尔会出现这样的情况:页面上的两个元素的HTML / CSS标签的每个部分都完全相同, 包括元素文本, 但它们确实有不同的功能需要自动化. 有多种方法可以解决这个问题:

使用findElements方法返回元素列表. 这样就可以通过索引访问列表中的任何元素

使用特定于CSS / XPATH的匹配器并精确匹配元素的出现

问:如果一个元素选择器对页面上的多个元素都是相同的,会发生什么?

只有第一次出现的元素才会被选中, 由于页面是从上到下读取的, 这将是最靠近文档顶部的元素.

Mastering Timeouts

问:说明显式等待和隐式等待的区别.

网页通常由许多不同的元素组成, such as links, paragraphs, buttons, input fields, text fields, 组合框和自定义对象. 而且大多数都是在整个页面加载时加载的, 而且加载后几乎可以立即访问它们. 但是在某些情况下,元素是异步加载的, 等待服务器响应, 或者来自外部服务提供者的响应.

当您知道一个元素是否可用于自动化的唯一方法是等待它完全加载时, Selenium WebDriver提供等待. 它们可以是显式的或隐式的. 隐式等待就像在访问元素之前总是等待3秒,或者每0轮询一次DOM.5秒来确定是否满足条件. 显式等待直接检查元素条件是否为真, 并暂停脚本执行,直到满足确切的条件, 如果在设定的持续时间后未满足,则抛出超时错误.

Implicit:

driver.manage().timeouts().TimeUnit implicitlyWait (5.SECONDS);

Explicit:

WebDriverWait = new WebDriverWait(driver, 5);
wait.直到(ExpectedConditions.elementToBeClickable(通过.id("myid")));

As you can see, 隐式等待是在驱动级完成的, 这样每当打开一个新页面, 在实际的元素查找完成之前, 司机将等待至少5秒. In reality, 在某些情况下,你必须将两者结合使用, 尽管显式等待通常被认为是更好的实践. 在测试可以变得更可靠的情况下,隐式等待肯定更好. 使用显式等待将使测试工作得更快,这也是非常重要的. 明智地使用等待是关键. 如果应用程序使用大量AJAX, 适当的等待状态对于使自动化可靠地工作至关重要.

HTTP Rules

那么,当你从一个页面导航到另一个页面时,浏览器中实际发生了什么? web上的一切都是从向服务器发出HTTP GET请求开始的,并从服务器获得各种不同形式的响应, 是完整的网页, images, 保存应用程序上下文中使用的数据的声音或简单响应. 今天的互联网是多种技术的混合体, but in its core, 它仍然是那个从一开始就统治互联网的旧HTTP协议. 拥有来自众多供应商的大量api, 今天的应用程序之间的联系更加紧密,有时很难将一个应用程序与其他应用程序隔离开来. 最近出现了一种两层应用程序的趋势, 一个API层,其中所谓的微服务(后端)和UI层(前端)作为相互通信的独立工作单元. 这样的分离, Selenium测试实际上已经不仅仅是功能了, 而是一种集成测试, 它们的价值正变得更加明显.

虽然Selenium开发人员并不迫切需要了解很多关于HTTP的知识, 它可以帮助他们在很多方面实现自动化, 特别是当应用程序使用大量外部api时. 他可以记录反应,然后在测试中模拟它们的速度和可靠性, 他也可以直接进行HTTP调用,因为它们是应用程序的一部分. 他甚至可以使用自己选择的工具对API应用层进行单独的测试.

问:哪些方法在浏览器中被认为是安全的?

出于安全考虑,web浏览器中只允许使用OPTIONS、GET、HEAD、POST、PUT和DELETE. 不允许使用TRACE和CONNECT等方法. Internet Explorer等旧浏览器对HTTP方法的支持更加有限.

问:在URL中使用参数会如何影响自动化?

很多web应用程序都在url中使用参数, 这在测试特定内容时非常有用, 无需经过应用程序的复杂工作流程. 考虑一下这个例子:

driver.get("http://etga.ngskmc-eis.net/companies/apply?interested_in =开发人员”)

虽然实现整个工作流程的自动化是可取的, 也可以操纵请求并直接获取其他测试所需的参数:

driver.get("http://etga.ngskmc-eis.net/companies/apply?interested_in =设计师”)

By this approach, 在不经过整个应用程序工作流的情况下,可以对测试进行参数化并验证条件行为.

将Selenium与其他工具和库结合使用

虽然您可以通过使用Selenium WebDriver自动化网站和应用程序来做很多事情, 会出现需要更多东西的情况. For example, 您可以将Selenium自动化与数据库测试结合起来, 验证数据是否正确存储在数据库中. 您甚至可以创建测试报告,记录自动化测试中所做的一切,并将其保存为各种格式, 以供将来参考或CI报告.

Speaking of CI, 对于Selenium开发人员来说,了解它们将是非常有益的. CI服务器是用来运行各种测试的, 构建应用程序并将它们打包成独立的包. 可以使用无头驱动程序/浏览器,比如PhantomJS在CI服务器上运行测试,或者使用 xvfb 运行真正的浏览器而不实际运行显示服务器. Whatever you choose, CI对于使测试自动化成为团队中每个成员都可以依赖的工具是无价的. 了解如何设置它们并为运行Selenium或任何其他类型的单元或集成测试做准备,对于开发的成功至关重要.

Communication

编程的核心是沟通. 不仅是人与机器之间,还有程序员之间. 使用代码与每个团队成员进行沟通是一项容易被忽视的技能, 因为让我们面对现实吧, 没有人知道明天会发生什么:其他人会加入这个项目, 应用程序的某些部分将缺少文档,没有人会知道它是如何编码的, 或者你会发现自己在每次有人尝试使用它之前都要解释代码的某些部分. 不可读的代码会让您感到悲伤,觉得您或其他人首先应该做得更好. 文档很棒,但代码本身需要尽可能清晰和沟通.

对于Selenium开发人员, 最重要的是他们对项目中的每件事都给出客观的意见, be it code, design, 特性集和实现, 并且在团队的每个成员之间来回交流. 这并不像看起来那么容易, 因为我们都是人, 有自己的看法, have our own pride, 有时,这种混合会成为做出正确决策和推动项目进展的障碍. 掌握沟通不是学校能教的, 至少没有作为任何官方研究的一部分. 这是社会智力的一部分,不是每个人都有.

精通英语是在线交流的重要组成部分, 尤其是在编码和从事自由项目时. 因此,事先评估候选人的语言能力是很重要的.

Wrap Up

今天的Web项目,如果没有某种自动化作为其基础部分,是无法看到的. 使用Selenium支持的任何语言, 创建良好的自动化测试和测试套件可以提供一个安全网,确保任何回归在进入生产环境之前被捕获, 这样的发展就会变得可靠和愉快. Selenium的版本3正在制作中,它将是对已经建立的遗留版本的改进. 问题不在于你是否应该自动化, 问题在于您的团队对自动化和质量保证的投入程度, 以及你能在其中投入多少.

从第一天开始自动化项目绝对是一个最佳实践, 并且拥有一个具有开发经验的Selenium自动化工程师是一个很大的加分项.

如果您的项目仍然没有Selenium测试, 自动化是有必要的, do not hesitate. Start now! 对于软件开发和团队士气来说,差异将是巨大的. 自动化并不是一根能让所有项目问题消失的魔杖, 但这至少会让他们更显眼.

顶尖的硒开发人员需求量很大.

Start Hiring