如何利用selenium来进行自动化页面测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用selenium来进行自动化页面测试相关的知识,希望对你有一定的参考价值。

selenium是一个自动化测试框架,它拥有IDE和API接口,可以应用于Java, C#. Python, Ruby等语言。用selenium来构建一个自动化的测试程序非常的简单。不过首先你需要熟悉web应用里面的request, response概念,以及XPath的用法。这里我将介绍一下如何利用Junit与selenium来实现自动化页面测试。


1. 下载必要依赖文件selenium-server-standalone-2.25.0.jar, junit-4.7.jar,并将它们放置到工程的lib文件夹下面 (我这里使用Firefox浏览器来作为客户端,所以就不需要下载额外的浏览器执行器,如果你想用IE或是Chrome做客户端,请下载对应的执行器


http://code.google.com/p/selenium/downloads/list)


2. 建立一个测试工程,在工程里创建一个测试文件,并添加如下代码:


import com.thoughtworks.selenium.Selenium;

import junit.framework.TestCase;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.BlockJUnit4ClassRunner;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebDriverBackedSelenium;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.openqa.selenium.internal.WrapsDriver;

import org.openqa.selenium.support.ui.Wait;

import org.openqa.selenium.support.ui.WebDriverWait;

 

import java.io.IOException;

 

import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated;

 

@RunWith(BlockJUnit4ClassRunner.class)

public class pickTest extends TestCase

    protected static Selenium selenium;

    private static WebDriver driver;

 

 

    @Before

    public void createAndStartService() throws IOException

        selenium = new WebDriverBackedSelenium(new FirefoxDriver(), "");

        driver = ((WrapsDriver) selenium).getWrappedDriver();

   

 

    @After

    public void createAndStopService()

        driver.quit();

   

 

    @Test

    public void should_open_google_page() throws InterruptedException

        driver.get("http://www.google.com.hk");

        <span style="color: #ff0000;">WebElement searchBox = driver.findElement(By.xpath("//*[@id=\\"lst-ib\\"]"));</span>

        searchBox.sendKeys("selenium");

        WebElement searchButton = driver.findElement(By.xpath("//*[@id=\\"tsf\\"]/div[2]/div[3]/center/input[1]"));

        searchButton.click();

        <span style="color: #3366ff;">Wait<WebDriver> wait = new WebDriverWait(driver, 30);

        wait.until(visibilityOfElementLocated(By.xpath("//*[@id=\\"ab_name\\"]/span")));</span>

   

3. 运行这个测试,你将看到firebox浏览器被自动启动,然后会自动的输入selenum并搜索。


这样,一个简单的自动化页面测试就完成了。有的朋友可能不太明白这段代码的含义。上面的代码中我标出了红色和蓝色两部分,我简单解释一下。Selenium是通过对浏览器的包装来进行页面处理的,因此我们首先会创建一个与浏览器相关的WebDriver对象。然后我们需要查找页面元素就是通过findeElement的方法和XPath的方式来获取页面对象(红色部分代码)。那么通常我们的一个点击操作产生服务器相应,这里就需要一些时间。蓝色部分的代码就是创建一个等待对象,你可以通过XPath的方式来确定返回后页面上的哪个元素加载完了就认为页面加载完了,同时等待对象也有一个超时设置,这样即是服务器端一直不返回或出错。我们依然可以结束测试。如何更快的确定页面元素的XPath,如下:

参考技术A

1. 下载必要依赖文件selenium-server-standalone-2.25.0.jar, junit-4.7.jar,并将它们放置到工程的lib文件夹下面 (我这里使用Firefox浏览器来作为客户端,所以就不需要下载额外的浏览器执行器,如果你想用IE或是Chrome做客户端,请下载对应的执行器

2. 建立一个测试工程,在工程里创建一个测试文件,并添加如下代码:

import com.thoughtworks.selenium.Selenium;

import junit.framework.TestCase;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.BlockJUnit4ClassRunner;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebDriverBackedSelenium;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.openqa.selenium.internal.WrapsDriver;

import org.openqa.selenium.support.ui.Wait;

import org.openqa.selenium.support.ui.WebDriverWait;

 

import java.io.IOException;

 

import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated;

 

@RunWith(BlockJUnit4ClassRunner.class)

public class pickTest extends TestCase

    protected static Selenium selenium;

    private static WebDriver driver;

 

 

    @Before

    public void createAndStartService() throws IOException

        selenium = new WebDriverBackedSelenium(new FirefoxDriver(), "");

        driver = ((WrapsDriver) selenium).getWrappedDriver();

    

 

    @After

    public void createAndStopService()

        driver.quit();

    

 

    @Test

    public void should_open_google_page() throws InterruptedException

        driver.get("http://www.google.com.hk");

        <span style="color: #ff0000;">WebElement searchBox = driver.findElement(By.xpath("//*[@id=\\"lst-ib\\"]"));</span>

        searchBox.sendKeys("selenium");

        WebElement searchButton = driver.findElement(By.xpath("//*[@id=\\"tsf\\"]/div[2]/div[3]/center/input[1]"));

        searchButton.click();

        <span style="color: #3366ff;">Wait<WebDriver> wait = new WebDriverWait(driver, 30);

        wait.until(visibilityOfElementLocated(By.xpath("//*[@id=\\"ab_name\\"]/span")));</span>

    

   

3. 运行这个测试,你将看到firebox浏览器被自动启动,然后会自动的输入selenum并搜索。

这样,一个简单的自动化页面测试就完成了。有的朋友可能不太明白这段代码的含义。上面的代码中我标出了红色和蓝色两部分,我简单解释一下。Selenium是通过对浏览器的包装来进行页面处理的,因此我们首先会创建一个与浏览器相关的WebDriver对象。然后我们需要查找页面元素就是通过findeElement的方法和XPath的方式来获取页面对象(红色部分代码)。那么通常我们的一个点击操作产生服务器相应,这里就需要一些时间。蓝色部分的代码就是创建一个等待对象,你可以通过XPath的方式来确定返回后页面上的哪个元素加载完了就认为页面加载完了,同时等待对象也有一个超时设置,这样即是服务器端一直不返回或出错。我们依然可以结束测试。如何更快的确定页面元素的XPath,如下:

本回答被提问者和网友采纳

selenium 截图

这篇文章介绍如何利用Selenium的方法进行截图,在测试过程中,是有必要截图,特别是遇到错误的时候进行截图。在selenium for Python中主要有三个截图方法,我们挑选其中最常用的一种。

截图技能对于测试人员来说应该是较为重要的一个技能。

在自动化测试中,截图可以帮助我们直观的定位错误、记录测试步骤。

记得以前在给某跨国银行做自动化项目的时候,某银的PM要求我们自动化测试的每一步至少需要1个截图,以证明每个功能都被自动化测试给覆盖过,在这种情况下截图就成了证明自动化测试有效性的重要手段。

好的测试人员都会截得一手好图,就跟骨灰级宅男定会吟得一手好诗一般。

webdriver的截图功能十分强悍。以前在截图的时候,最麻烦的问题莫过于页面太长而只能截到一屏,屏幕以外需要移动滚动条才能看到的区域一般是截不到的。现在webdriver解决了这个问题,无论页面有多长,webdriver都能比较完美的截到完整的页面。

下面的代码演示了如何使用webdriver进行截图:

# -*- coding: utf-8 -*-
from selenium import webdriver
import unittest
import os,sys,time
import HTMLTestReport
#登录
driver =webdriver.Firefox()
current_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
current_time1 = time.strftime("%Y-%m-%d", time.localtime(time.time()))
print(current_time )
print(current_time1 )
# 必须打印图片路径HTMLTestRunner才能捕获并且生成路径,image**\**.png 是获取路径的条件,必须这样的目录
#设置存储图片路径,测试结果图片可以按照每天进行区分
#通过if进行断言判断
driver.get("https://baidu.com/")
#新创建路径“.”表示当前整个.py文件的路径所在的位置,“\”路径分割符,其中的一个是“”表示转义字符
pic_path = .\result\image\ + current_time1+\ + current_time +.png
print(pic_path)
time.sleep(5)
print(driver.title)
#截取当前url页面的图片,并将截取的图片保存在指定的路径下面(pic_path),注:以下两种方法都可以
driver.save_screenshot(pic_path)
driver.save_screenshot(.\result\image\ + current_time1+\ + current_time +.png) 
if u百度一下,你就知道 == driver.title:
  print (Assertion test pass.) 
else:
  print (Assertion test fail.)
 #通过try抛出异常进行断言判断  
driver.get("https://baidu.com/")
driver.save_screenshot(pic_path)
try:
  assert u百度一下,你就知道 == driver.title
  print (Assertion test pass.) 
except Exception as e:
  print (Assertion test fail., format(e))
time.sleep(5)
driver.quit()

指定元素截图

# coding:utf-8
# coding:cp936
from selenium import webdriver
from PIL import Image

broswer = webdriver.Chrome()
broswer.get("http://www.baidu.com")
broswer.save_screenshot(rE:photo.png)
baidu = broswer.find_element_by_id(su)
left = baidu.location[x]
top = baidu.location[y]
elementWidth = baidu.location[x] + baidu.size[width]
elementHeight = baidu.location[y] + baidu.size[height]
picture = Image.open(rE:photo.png)
picture = picture.crop((left, top, elementWidth, elementHeight))
picture.save(rE:photo2.png)

 

以上是关于如何利用selenium来进行自动化页面测试的主要内容,如果未能解决你的问题,请参考以下文章

利用 selenium 的 webdrive 驱动 headless chrome

Python+Selenium练习篇之2-利用ID定位元素

如何利用selenium写自动化测试脚本

如何爬取淘宝登录页面

页面有很多链接,如何用selenium进行自动化测试,验证每个链接的正确性

selenium自动化测试之测试结果验证