• 11
  • 12
分享

  由于Parasoft针对Selenium测试的新产品Parasoft Selenic,我最近学习了如何使用Selenium。我已经具有Web测试、编写Java代码和JUnit的经验,但是我以前从未使用过Selenium。以下是一些有用的资源,我发现这些资源有助于提高效率。

  什么是Selenium?

  首先是要确保您了解Selenium IDE和Selenium WebDriver之间的区别。我以为Selenium IDE是一种基于Selenium WebDriver的GUI记录/播放程序,是入门的好方法,但是我很快发现自己遇到了局限性,在定位器错误/丢失的情况下,播放无法成功进行,并意识到任何认真的Selenium测试人员都在使用Selenium WebDriver编写代码。完了,我不得不开始编写代码。

  Selenium WebDriver入门

  Selenium WebDriver库可用于几种不同的语言,从而使Selenium可以被许多人访问。由于我最喜欢用Java编写代码,因此我坚持了这一点。(此外,尽管Java进行Selenium测试不需要JUnit,但我不明白为什么有人不使用它,因为它附带了许多专门用于用Java编写测试用例的功能。)

  最后,如果我要编写JUnits,那么我想我也可以在IDE中编写它们。有两种IDE在行业中最常用于Java:Eclipse和IntelliJ。我的大部分职业都是使用Eclipse,因此我坚持使用它。

  做出这些决定之后,我就可以开始了。

  Selenium要知道的技能

  在开始之前,请确保您具有一些必备的技能,以掌握测试自动化的基础知识。

  网络技能

  熟悉HTML和CSS:您不应该担心网站的页面源,并且应该了解页面源如何转换为您在浏览器中看到的内容。如果HTML对您来说完全陌生,那么我建议您进行一些基础教育。这是一个很棒的网站,对我的早期教育网络有所帮助:

  https://www.w3schools.com/

  浏览器的开发人员工具和XPath:另一个基本技能是了解如何在页面上定位元素。Selenium WebDriver支持多种执行此操作的机制,您很快就会了解它们。您可能会希望使用浏览器的开发人员工具来轻松找到页面上的元素,下面是一个很棒的教程,可帮助您快速使用Chrome:

  https://www.toolsqa.com/selenium-webdriver/inspect-elements-with-chrome-developer-tools/

  编码技巧

  如果您希望过渡到测试自动化工程职位,则需要发展一些编码技能。在您惊慌失措之前,好消息是,在Selenium中编写代码以自动执行Web测试相对容易。实际上,我认为Selenium是学习编码的好方法。您将要编写的代码受到严格限制,因此您不太可能完全不知所措。寻找免费的教程和课程可以帮助您开始使用所选择的语言,这并不难。为了学习Selenium需要了解的内容,我找到了一个很棒的教程,涵盖了Java和Selenium,适合初学者使用:

  https://www.toolsqa.com/selenium-tutorial/

  如果您确实选择Java,那么我还建议您学习JUnit,这是Java的流行测试框架。这是一篇很棒的教程,涵盖了JUnit,最后一课涵盖了将JUnit与Selenium测试结合使用:

  https://www.toolsqa.com/java/junit-framework/junit-introduction/

  设置环境

  除了toolsqa的教程之外,我发现自己经常光顾的另一个资源是:

  https://www.softwaretestinghelp.com/selenium-tutorial-1/

  这两个资源将涵盖使用Eclipse,Java,JUnit 4,Selenium WebDriver和Maven设置环境所需的所有主题。

  ......行家?那是什么?我要发表的评论是,我发现大多数教程都将Maven作为高级话题排在了后面。Maven是一个构建工具,可利用其所有必需的依赖项来简化对代码的编译、测试和部署。像JUnit一样,Maven是另一个可选项目,但我现在想提出来,因为一旦知道要做什么,它会使您的项目设置更加容易。如果您从Maven开始,那么您以后就不必考虑将Java项目转换为Maven项目,只需从一开始就从Maven开始!我最喜欢的教程来自:

  https://www.softwaretestinghelp.com/maven-project-setup-for-selenium-selenium-tutorial-24/

  您的第一个Selenium脚本

  我提到的两个教程参考都很好地指导您完成创建第一个脚本的过程。toolsqa文章假设您缺乏编码知识,并且softwaretestinghelp链接涵盖了更多领域,但是它们都很出色:

  https://www.toolsqa.com/selenium-webdriver/selenium-test/

  https://www.softwaretestinghelp.com/selenium-webdriver-tutorial-10/

  一旦第一个脚本启动并运行,并且对JUnit有所了解,toolsqa的JUnit教程的最后一课将帮助您将初始脚本重构为JUnit格式:

  https://www.toolsqa.com/java/junit-framework/junit-test-selenium-webdriver/

  Selenium中的页面对象模型

  在熟悉了Selenium基础知识并拥有一个可以在浏览器中播放一两个场景的脚本之后,就应该准备好进入下一个层次了。页面对象模型是组织Selenium测试代码以使其更易于维护并减少重复代码的一种方式。到目前为止,我的测试已将所有测试代码包含在测试方法中。因此,我经历了一个两步过程,首先将现有测试重构为Page Object Model,然后再次重构以使用Page Factory模式对其进行优化。这是一个有启发性的两步过程,我只能想象如果我跳过这些最佳实践并在测试之后疯狂地创建测试,会后悔多少。如果您在Parasoft Selenic中使用Smart Recorder,则可以自动执行此操作。这是我用来对该主题进行自我教育的一些指南:

  https://www.guru99.com/page-object-model-pom-page-factory-in-selenium-ultimate-guide.html

  https://www.swtestacademy.com/page-factory-selenium-webdriver/

  如果要获得相同的结果似乎需要额外的工作和额外的代码,那您是对的。而且,如果您只打算进行1或2个测试,那么也许这有点过头了,但是对于测试自动化工程师而言,情况绝非如此。当您构建一个包含100或1000多个测试的强大的回归测试套件时,这种模式最终使世界变得有意义。从长远来看,代码重用将为您节省大量时间。

  元素位置

  在尝试使用Selenium脚本时,您将开始理解为什么我在页面上列出定位元素是一项必要技能。您将在浏览器的开发人员工具扩展A LOT中找到自己,并开始尝试XPath。尽管有许多方法可以使用Selenium在页面上定位元素,但是XPath是最灵活,功能最强大的方法之一。如果您无法通过简单的策略(例如使用ID,名称或链接)来唯一地标识元素,那么您将使用XPath或CSS定位器。任何相当复杂的Selenium测试都将在这里或那里需要一些XPath来定位顽固的页面元素,而XPath带来的效果越好,测试人员的效率就越高。

  好的,Wilhelm,XPath很棒,除了这里的家庭作业,还能给我带来更多好处吗?其实,是!还有一个漂亮的Chrome扩展程序(也可用于Firefox),称为TruePath。这个插件做了不错的工作,提供了推荐的XPath列表供您选择,您可以将它们复制/粘贴到Selenium定位器代码中。它并不总是完美的,但是我发现它可以帮助我展示我立即喜欢的Relative XPath,或者展示与我喜欢的东西足够接近的Relative XPath,然后我可以以此为起点进行调整。

  使用jQuery的AJAX智能等待

  一旦定位元素成为第二天性,您很可能会遇到另一个常见问题。您正在测试的Web应用程序具有浏览器正在对服务器进行的AJAX(异步JavaScript和XML)调用,而您的Selenium脚本正在执行这些操作,从而使浏览器没有足够的时间来完成对异步流量的处理。我正在测试的电子商务网站存在此问题,我的Selenium测试是如此之快地单击“添加到购物车”,然后单击“查看购物车”,以至当它到达购物车页面时,购物车是空的!我需要告诉我的Selenium测试在单击“查看购物车”之前要等待适当的时间,但是该怎么做呢?

  本教程涵盖了一些与等待条件相关的基本Selenium课程,但似乎没有一个适合于此类异步和动态的课程。我如何预测Web服务器需要多长时间响应?我是否高估了安全性并使测试速度慢于需要的速度?有没有更好的办法?原来有。如今,许多现代Web框架都在使用jQuery库来支持对后端服务器的AJAX调用。 Selenium WebDriver允许我执行JavaScript作为测试步骤,并且我可以执行一些JavaScript以检查jQuery的状态,以提示浏览器何时完成与网络服务器的对话,并且可以继续进行。我发现它深深地藏在toolsqa网站中(有趣的是,它不属于Selenium教程的一部分):

  https://www.toolsqa.com/selenium-cucumber-framework/handle-ajax-call-using-javascriptexecutor-in-selenium/

  对于初学者来说,这些额外的信息非常有用,但是,如果您想要的是更重要的内容,那么以下是关于同一主题的简洁文章:

  https://automationrhapsody.com/efficiency-waiting-for-ajax-call-data-loading-with-selenium-webdriver/

  管理变更

  我要与您讨论的最后一个话题是困扰所有管理变更的Selenium测试人员的话题。Web测试自动化的缺点之一是UI更改的频率以及它如何影响自动化测试的稳定性。身为测试自动化工程师,您很快就会习惯于故障排除过程,以排除为什么测试一直无法执行的原因,以及是否满足以下条件:

  您的考试有问题

  环境问题

  对应用程序的无害更改(即不是错误)

  对应用程序的意外更改(即真正的错误!)

  自动化测试失败会导致很多错误警报,这不是因为它们发现了一个错误,而是因为它们需要维护或环境存在问题。

  一种有助于最大程度地减少这一普遍问题的策略之一,我已经在“元素位置”中进行了介绍。当测试无法找到Element时,通常是因为它使用的定位策略在应用程序的最新部署中不再有效。在这里,元素的定位方式很重要,因此,让我们讨论一个示例,该示例如何编写可适应变化的定位器:

  如果考虑这样的元素的绝对XPath:

  /html/body/div[25]/div[2]/div/span/section[2]/div/h2/p

  亲爱的,对HTML的任何细微改动都会破坏这一点。 如果您像这样构造一个相对XPath:

  //p[@id='8232:0'][contains(.,'Guidance for Success')]

  这样,您的测试就更有可能获得成功。注意单词“更好的机会”。有时,应用程序会发生很大变化,以至于您根本不走运。但是编写更具弹性的测试将减少自己将来工作的机会。(或者您可以查看Parasoft Selenic。)

  等待中也存在相同的问题。由于等待条件的原因,很多因素都可能导致测试自动化的不稳定。在AJAX上使用诸如智能等待之类的策略使用jQuery将帮助您减少由于等待条件而需要解决测试问题的可能性。在进行主题讨论时,以下是有关Selenium中等待的有用教程:

  https://www.softwaretestinghelp.com/selenium-webdriver-waits-selenium-tutorial-15/

  不过,就像元素位置一样,有时您会变成S-O-L,并且不可避免地需要维护。

  总结

  学习Selenium的经验使我感谢您在成为测试自动化工程师的过程中可能面临的挑战。如果您是新手并且感到被吓到了,请记住,这比您想象的要容易,并且您将很快成为专家级的自动化网络测试人员。



作者:佚名   

来源:http://www.51testing.com/html/50/n-4476750.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   为什么做金融类软件测试  举个栗子,银行里的软件测试工程师。横向跟互联网公司里的测试来说,薪资相对稳定,加班少甚至基本没有,业务稳定。实在是测试类岗位中的香饽饽!  一、什么是金融行业  金融业是指经营金融商品的特殊行业,它包括银行业、保险业、信托业、证券业和租赁业。  往往涉及证券、银行、基金、信托、保险、投行、期货等领域。  二、金融行业的业务特点  随着金融行业的业务不断增加,金融交易模式的不断变化,金融机构对信息化的要求也越来越高,高质量的金融软件对于金融机构来说显得尤为重要。如何保证金融行业软件的质量,对金融行业软件的测试人员来说,也提出了更高的要求。  1. 金融行业的业务特点...
            1 1 1183
            分享
          •   1、Unittest  Unittest是Python标准库中自带的单元测试框架。有时候也被称为PyUnit。就像JUnit是Java语言的标准单元测试框架一样,Unittest(PyUnit)则是Python语言的标准单元测试框架,官方维护。支持自动化测试,测试用例的初始化和关闭,测试用例的聚合等功能。  Unittest中最核心的四个概念是:testcase(测试用例), testsuite(测试用例集),testrunner(测试执行),testfixture(测试装置)。  Testcase测试用例,每个测试方法以 test 开头,自动被Unittest识别的。  TestSuit...
            14 15 1085
            分享
          • 一、DMLDML是Data Manipulation Language英文缩写,数据操作语言包括:INSERT ( 添加语句 )UPDATE ( 更新语句 )DELETE ( 删除语句 )1、INSERT语法:INSERT [INTO] 表名 [(列名)] VALUES (值列表);实例:INSERT INTO goods (name) VALUES ('饼干');1.1 插入单行数据注意:字段名是可选的,如省略依次插入所有字段。INSERT INTO goods VALUES (8,'肥皂',DEFAULT,'2...
            0 0 1637
            分享
          • 试用期结束之后转正大概是每个测试人都会经历的过程,转正答辩需要先梳理试用期间的一些案例等,形式不限,word,xmind,ppt都可以,重点是文件囊括的内容。其实大部分人对这种好几个人参加的答辩比较紧张,何况又是有很多领导来参加答辩。不过现在回头想想,转正答辩不过是走个形式,试用期间的努力大家都有目共睹。不过,还是要好好准备答辩材料的,毕竟出于个人考虑,答辩内容也是对自己试用期的工作做一个总结和反思的过程。接下来简单介绍下文件准备的要点。文件框架:1、个人介绍 2、工作业绩回顾 3、下阶段工作规划 4、对行业认知 5、对公司的建议我的展示:工作业绩回顾主...
            0 0 9097
            分享
          • HTML概述我们的网络应用软件主要包括两种:B/S系统和C/S系统。用户通过某界面程序输入数据、提交操作。服务器端对用户提交的数据进行处理,再将处理结果返回给到客户端。服务器端是对数据进行逻辑处理的,客户端提供界面给用户输入数据,显示结果信息。因为界面的不同,主要有两种:一种是基于网页的,叫做B/S系统(Browser)。另一种是基于客户端的,叫做C/S系统(Client)。B/S系统与C/S系统的优缺点1. B/S系统的客户端,因为浏览器已经是统一的。只需要实现界面内容即可,工作内容相对简单。2. 我们的电脑系统是不相同的,那么我们需要兼容不同的电脑。在这里,浏览器都能够被各种系统兼容,所以...
            0 9 3886
            分享
      • 51testing软件测试圈微信