当前位置: 首页 > 工具软件 > selenide > 使用案例 >

Selenium和Selenide

阮喜
2023-12-01

一,Selenium

  1.关于自动化测试

       自动化测试用例并不是总是有利的。有些时候手动测试可能更为恰当。例如,如果应用程序的用户界面在不久的将来会有相当大的改变,那么自动化将需要重写。 此外,有时根本没有足够的时间来构建测试自动化。短期而言,手动测试可能会更为有效。 如果应用程序有一个十分紧迫的截止日期,目前还没有测试自动化, 并且它的当务之急是在这个时限内完成的测试,那么手动测试是最好的解决办法。然而,对于提高软件团队测试过程的长期效率,自动化有独特的优势。 测试自动化支持:

        ・频繁的回归测试

        ・在开发过程中给开发人员快速反馈

        ・几乎无限的测试用例执行迭代

        ・可定制的应用缺陷报告

        ・支持敏捷或极限开发方法

        ・纪律的测试用例文档

        ・寻找手工测试遗漏的缺陷

  2.Selenium简介

        Selenium不是一个工具,它是一系列工具的总称,是一款基于Web应用程序的开源测试框架。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。它支持Firefox,IE,Chrome等众多浏览器。同时支持Java,C#,Ruby,Python,PHP,等众多主流语言。

  3.Selenium组件

    (1)Selenium IDE:它是构建Selenium测试用例的集成开发环境,是一个Firefox插件,为开发和运行单一测试用例或者完整测试套件提供了易用的界面。Selenium-IDE结合Firefox插件实现录制,编辑和调试测试脚本,并在浏览器中模拟用户真实操作进行回放。其特点是:非常容易在页面上进行录制;能自动通过id,name,Xpath来定位页面元素;自动执行selenium命令;录制生成的脚本能够转化成各种语言;在每个录制生成的脚本中能够加入断言。

    (2)Selenium-RC (Selenium Remote Control):由两部分组成,即Server端(负责启动和关闭浏览器,类似HTTP代理)和Client端(由针对各种编程语言设计的开发库构成)。RC提供了一个代理服务器,允许用程序语言编写测试用例。这样做的好处是可以将Selenium与其他测试框架(如Junit)进行集成测试。

    (3)Selenium Webdriver:Selenium 2.0 以后的核心,用于控制浏览器。Webdriver作为最新版的Selenium工具,代表着Selenium的未来方向。它提供了许多功能,包括一套组织性更好的,面向对象的API。Webdriver完全就是一套类库,不依赖于任何测试框架,不需要像RC那样先启动服务器。

    (4)Selenium-Grid:Grid能够让RC的测试在多个不同的环境中运行,也能让测试并行执行,能够大幅度的提高测试的效率。

    此外,在Selenium 3.0之后可以说主要包括两个工具,就是上面所说的③和④。

二,Selenide

 1.Selenide简介    

     Selenide是一个比较新的UI自动化测试工具,而不是一个自动化测试框架。因为它只是对webdriver的一个封装,它封装了更好用的API,更稳定的控件搜索机制,更好的异常处理机制等等,底层的实现还是webdriver。所以一切webdriver能做的selenide都能做。如果你不想使用selenide了,或者selenide满足不了你的需要,你大可以通过以下方式获取一个webdriver,直接操作webdriver的api。顺便一说,现在只有java版本。WebDriver driver = WebDriverRunner.getWebDriver();

 2.Selenide和webdriver的比较

    Selenide默认使用Firefox浏览器,如果你要使用其他浏览器可以手动设置一下。如:

Configuration.browser="chrome";
// 在环境变量中设置chrome 浏览器的路径
System.setProperty("webdriver.chrome.driver", Constant.getChromeDriverPath());

    Selenide内置隐式等待;测试用例运行完后自动关闭浏览器;代码简单,易读;自动对失败的测试用例截图;由于是对Selenium的封装,因此可以和Selenium一起使用。

 3.Selenide的安装

    Maven用户:

<dependency>
    <groupId>com.codeborne</groupId>
    <artifactId>selenide</artifactId>
    <version>3.1</version>
    <scope>test</scope>
</dependency>

    Ivy用户:

 <ivy-module>
  <dependencies> 
    <dependency org="com.codeborne"  name="selenide"  rev="3.1"/>
  </dependencies>
</ivy-module>

 4.Selenide操作

     详细内容参看:https://blog.csdn.net/galen2016/article/details/88734237

   (1)元素定位

        Selenide使用“$”符号定位一个元素(导包:import static com.codeborne.selenide.Selenide.*;),使用IDE工具写代码只要输入 $ (by 就可以通过代码提示来找到我们想要的方法了。

$(String cssSelector) - $符号默认参数是“CSS选择器”, 返回由页面上的CSS选择器找到的第一个元素的SelenideElement类的对象。SelenideElement类继承WebElement。
$(By) - 由By类的定位器返回“第一个SelenideElement类的对象”。
$$(String cssSelector) - 返回ElementsCollection类型的对象,表示CSS选择器找到的所有元素的集合。
$$(By) - 由By类型的定位器返回“元素集合”。
$(byText(“Sign in”)) - 通过text定位,如果使用selenium的话只能用Xpath的写法,如driver.findElementByXpath(“//*[text()=‘Sign in’]”)。
$(byXpath("//*[text()=‘Sign in’]")) -通过Xpath定位
$(byAttribute(“placeholder”,“房源编号”)) - 通过属性定位
$$("#search-results a").findBy(text(“selenide.org”)) 二级查找

      上表中列出的元素定位方法,是使用别名的方式进行定位的。前面4个方法分别对应于find(String cssSelector),find(By),findAll(String cssSelector),findAll(By)。也就是说上面的$,$$只是更简洁的别名。

  (2)元素操作

      Part1:selenide对元素的操作有如下这些:

     Part2:selenide获取元素状态和属性值的方法:

    下面是一些实际的应用实例:

    (3)元素集合定位

        通过"$$"定位一组元素,如:$$("#search-results a")  -返回ElementsCollection类型的元素集合

    (4)下面是一些有关浏览器的操作

    (5)断言

        Selenide通过should来进行断言,相当于Assert。下面是一些说明的示例:

        还可以使用断言来做显示等待,等待的状态(visible,enabled,text("some text"))是否满足,直到超时达到的值(默认设置为4000毫秒),例如:$("#submit").shouldBe(enabled).click();

        还可以明确设置超时:waitUntil(条件,毫秒);    waitWhile(条件,毫秒);

 5.常用设置

 6.如何定位元素的class属性含有多个的情况?

     背景:有些class属性中间有空格,如果直接复制过来定位是会报错的。这里顺便讲解一下class属性:class属性中间的空格并不是空字符串,那是间隔符号,表示的是一个元素有多个class的属性名称;class属性是比较特殊的一个,除了这个有多个属性外,其它的像name,id是没多个属性的。

   (1)定位class属性带有空格的元素

            既然知道class属性有空格是多个属性了,那定位的时候取其中的一个就行(并且要唯一),也就是说class="j-inputtext dlemail",取"j-inputtext"和"dlemail"都是可以的,只要这个class属性在页面上唯一就行。如果这个class的多个属性都不是唯一的,可以用复数定位的方式,把所有的相同元素定位出来,按下标取第几个就行。

  (2)css定位

           使用css来定位class属性的元素,只要在class属性前面加个点(.)就可以了,然后空格变成点(.)就能定位了。如:$(By.cssSelector(".j-inputtext.dlemail")); 当然css也可以取class属性的其中一个属性(页面上唯一的属性)来定位,定位方法是灵活多变的。如:$(By.cssSelector(".dlemail")); 

 (3)示例

方法一:取单个class属性

$(By.className("dlemail")).send_keys("yoyo");

方法二:定位一组元素后取下标定位(乃下策)

$(By.className("j-inputtext"))[0].send_keys("yoyo");

方法三:css定位

$(By.cssSelector(".j-inputtext.dlemail")).send_keys("yoyo");

方法四:取单个class属性也是可以的

$(By.cssSelector(".dlemail")).send_keys("yoyo");

方法五:直接包含空格的CSS属性定位大法

$(By.cssSelector("[class='j-inputtext dlemail']")).send_keys("yoyo");

 类似资料: