问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

8种必备Selenium编写自动化用例的技巧

创作时间:
作者:
@小白创作中心

8种必备Selenium编写自动化用例的技巧

引用
CSDN
1.
https://blog.csdn.net/lzz718719/article/details/141870079

在自动化测试领域,编写高质量的测试用例是确保软件质量和稳定性的重要环节。本文将为您介绍8个实用的Selenium自动化测试技巧,帮助您编写更高效、更可靠的自动化测试代码。

1. 命名约定

在编写自动化测试代码时,遵循正确的命名约定对于代码的可读性和可维护性至关重要。这包括变量、方法、类和包的命名。例如,方法名称应该清晰地描述其功能,如Register_User()用于用户注册。同样,变量命名也应该具有描述性,避免使用模糊的名称如web1web2等。

错误示例:

public void Register_User() throws InterruptedException {
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    driver.get("https://www.lambdatest.com/ ");
    driver.manage().window().maximize();
    WebElement web1= driver.findElement(By.xpath("//a[text()='Free Sign Up']"));
    web1.click();
    WebElement web2=driver.findElement(By.xpath("//input[@name='organization']"));
    web2.sendKeys("LambdaTest");
    // ...
}

正确示例:

public void Register_User() throws InterruptedException {
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    driver.get("https://www.lambdatest.com/ ");
    driver.manage().window().maximize();
    WebElement link= driver.findElement(By.xpath("//a[text()='Free Sign Up']"));
    link.click();
    WebElement organization=driver.findElement(By.xpath("//input[@name='organization']"));
    organization.sendKeys("LambdaTest");
    // ...
}

2. 减少、重用和回收

将测试方法分解为最小的功能块,每个方法只负责单一功能,可以提高代码的可维护性。避免在多个方法中复制相同的代码,而是通过调用已有方法来实现代码复用。当系统发生变更时,及时更新现有方法而不是创建新的方法,以保持框架的稳定性和一致性。

示例:

@Test
public void Register_User() throws InterruptedException {
    // 注册用户相关代码
}

@Test
public void Login_User() {
    // 登录用户相关代码
}

@AfterClass
public static void BrowserClose() {
    driver.quit();
}

3. 合理地组织测试

使用测试框架(如JUnit或TestNG)提供的注解来控制测试流程,可以提高代码的可读性和可维护性。例如,使用@BeforeClass注解来处理耗时的初始化操作,使用@AfterClass注解来处理清理工作。

示例:

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.testng.annotations.AfterClass;

public class Lamdatest {
    static WebDriver driver;

    @BeforeClass
    public static void BrowserOpen() {
        System.setProperty("webdriver.chrome.driver", "chromepath");
        driver= new ChromeDriver() ;
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    }

    @Test(priority=1)
    public void Register_User() throws InterruptedException {
        // 注册用户相关代码
    }

    @Test(dependsOnMethods="Register_User")
    public void Login_User() {
        // 登录用户相关代码
    }

    @AfterClass
    public static void BrowserClose() {
        driver.quit();
    }
}

4. 全面验证您的测试

在自动化测试中,验证是确保测试有效性的关键。每个用户操作都应该进行验证,包括元素可见性、页面重定向等。使用断言(Assertion)来检查预期结果是否与实际结果一致,可以使用硬断言(Hard Assertion)或软断言(Soft Assertion)根据具体需求选择。

示例:

@Test
public void Login_User() throws IOException {
    // 登录成功验证相关代码
}

@Test
public void Login_invalid_User() throws IOException {
    // 登录失败验证相关代码
}

5. 避免使用Thread.sleep

静态等待(如Thread.sleep)会导致测试不稳定并增加执行时间。推荐使用显式等待(Explicit Wait)或隐式等待(Implicit Wait)来处理异步操作,使测试脚本更加健壮。

6. 进行数据驱动测试

数据驱动测试通过从外部数据源(如CSV、Excel等)读取测试数据,可以减少代码冗余并提高测试覆盖率。将硬编码的值替换为变量,可以简化代码维护。

示例:

public void Login_User() throws IOException {
    File f1= new File("C://Users//navyug//Desktop//Test.xlsx");
    FileInputStream scr= new FileInputStream(f1);
    XSSFWorkbook book= new XSSFWorkbook(scr);
    XSSFSheet sheet=book.getSheetAt(0);
    for(int i=0; i<=sheet.getLastRowNum(); i++ ) {
        Row row = sheet.getRow(i);
        Cell cell = row.getCell(0);
        driver.findElement(By.xpath("//input[@name='email']")).sendKeys(cell.toString());
        cell= row.getCell(1);
        driver.findElement(By.xpath("//input[@name='password']")).sendKeys(cell.toString());
        // ...
    }
}

7. 报告生成

自动化测试的结果需要通过报告来展示,以便于团队成员和利益相关者查看。可以使用TestNG、JUnit等框架的内置报告功能,也可以使用第三方库来生成更详细的测试报告。

示例:

@Test
public void Login_User() throws IOException {
    // 登录相关代码
    takescreenshot();
}

public void takescreenshot() throws IOException {
    TakesScreenshot scr= ((TakesScreenshot)driver);
    File file1= scr.getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(file1, new File("C:\\Users\\navyug\\Desktop\\Login_user.PNG"));
}

8. 跨浏览器测试

为了确保Web应用程序在不同浏览器上的兼容性,需要进行跨浏览器测试。可以使用TestNG等框架的参数化功能来实现不同浏览器的测试。

示例:

public class crowssbrowser {
    static WebDriver driver;

    @Parameters("browser")
    @BeforeClass
    public static void Browser_Select(String browser) {
        if(browser.equalsIgnoreCase("firefox")) {
            System.setProperty("webdriver.firefox.marionette", "geckodriverpath");
            driver = new FirefoxDriver();
        } else if (browser.equalsIgnoreCase("chrome")) {
            System.setProperty("webdriver.chrome.driver", "chromedriverpath");
            driver= new ChromeDriver() ;
        }
        driver.get("https://accounts.lambdatest.com/login");
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
}

TestNG XML配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
    <test name="FirefoxTest">
        <parameter name="browser" value="firefox" />
        <classes>
            <class name="crowssbrowser" />
        </classes>
    </test>
    <test name="chrometest">
        <parameter name="browser" value="chrome" />
        <classes>
            <class name="crowssbrowser" />
        </classes>
    </test>
</suite>

通过遵循以上8个技巧,您可以编写出更高质量、更可靠的Selenium自动化测试用例,从而提高软件开发效率和产品质量。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号