You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一类的两个方法间传递Selenium表单输入值?

解决Selenium中跨方法共享表单输入值的问题

方案一:使用类成员变量存储输入值

把生成的表单值定义为当前测试类的成员变量,同一类中的verifyNewLeadDetailsInEmail()方法就能直接访问这些值。

修改后的代码示例:

// 定义类的私有成员变量,存储表单输入值
private String randomFName;
private String randomLName;
private String generatedEmail;
private String randomPhoneNum;
private String randomTimeToCall;
private String randomComment;

public void enterRequiredAndOptionalDetails(){
    randomFName = "Tester"+generateRandomAlpha(2);
    randomLName = "Last"+generateRandomAlpha(2);
    generatedEmail = randomFName+randomLName+"@test.com";
    randomPhoneNum = "045"+generateRandomNumber(7);
    randomTimeToCall = generateRandomNumber(1)+"am to " + generateRandomNumber(1) + "pm";
    randomComment = "Hi, this is a sample comment"+generateRandomAlpha(5);

    sendKeys(Properties_Details_NewLeadModal_FirstName,randomFName);
    sendKeys(Properties_Details_NewLeadModal_LastName,randomLName);
    sendKeys(Properties_Details_NewLeadModal_Email,generatedEmail);
    sendKeys(Properties_Details_NewLeadModal_Telephone,randomPhoneNum);
    sendKeys(Properties_Details_NewLeadModal_PreferredTimeToCall,randomTimeToCall);
    sendKeys(Properties_Details_NewLeadModal_Comment,randomComment);
}

public void verifyNewLeadDetailsInEmail(){
    // 直接使用类成员变量进行验证
    Assert.assertEquals(getExtractedFirstNameFromEmail(), randomFName);
    Assert.assertEquals(getExtractedLastNameFromEmail(), randomLName);
    Assert.assertEquals(getExtractedEmailFromEmail(), generatedEmail);
    // 其他字段验证逻辑...
}

方案二:返回封装表单数据的实体类(更灵活)

如果担心成员变量在多线程测试中出现数据污染,或者需要复用表单数据,可以创建专门的实体类封装字段,让输入方法返回这个对象,再传递给验证方法。

1. 创建表单数据实体类

public class LeadFormData {
    private String firstName;
    private String lastName;
    private String email;
    private String phoneNumber;
    private String preferredTimeToCall;
    private String comment;

    // 构造方法
    public LeadFormData(String firstName, String lastName, String email, String phoneNumber, String preferredTimeToCall, String comment) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.phoneNumber = phoneNumber;
        this.preferredTimeToCall = preferredTimeToCall;
        this.comment = comment;
    }

    // Getter方法
    public String getFirstName() { return firstName; }
    public String getLastName() { return lastName; }
    public String getEmail() { return email; }
    public String getPhoneNumber() { return phoneNumber; }
    public String getPreferredTimeToCall() { return preferredTimeToCall; }
    public String getComment() { return comment; }
}

2. 修改输入方法返回实体对象

public LeadFormData enterRequiredAndOptionalDetails(){
    String randomFName = "Tester"+generateRandomAlpha(2);
    String randomLName = "Last"+generateRandomAlpha(2);
    String generatedEmail = randomFName+randomLName+"@test.com";
    String randomPhoneNum = "045"+generateRandomNumber(7);
    String randomTimeToCall = generateRandomNumber(1)+"am to " + generateRandomNumber(1) + "pm";
    String randomComment = "Hi, this is a sample comment"+generateRandomAlpha(5);

    sendKeys(Properties_Details_NewLeadModal_FirstName,randomFName);
    sendKeys(Properties_Details_NewLeadModal_LastName,randomLName);
    sendKeys(Properties_Details_NewLeadModal_Email,generatedEmail);
    sendKeys(Properties_Details_NewLeadModal_Telephone,randomPhoneNum);
    sendKeys(Properties_Details_NewLeadModal_PreferredTimeToCall,randomTimeToCall);
    sendKeys(Properties_Details_NewLeadModal_Comment,randomComment);

    // 返回封装好的表单数据对象
    return new LeadFormData(randomFName, randomLName, generatedEmail, randomPhoneNum, randomTimeToCall, randomComment);
}

3. 修改验证方法接收实体对象

public void verifyNewLeadDetailsInEmail(LeadFormData leadFormData){
    // 使用实体对象的getter方法获取输入值进行验证
    Assert.assertEquals(getExtractedFirstNameFromEmail(), leadFormData.getFirstName());
    Assert.assertEquals(getExtractedLastNameFromEmail(), leadFormData.getLastName());
    Assert.assertEquals(getExtractedEmailFromEmail(), leadFormData.getEmail());
    // 其他字段验证逻辑...
}

测试用例调用方式

// 在测试用例中依次调用
LeadFormData formData = enterRequiredAndOptionalDetails();
submitForm(); // 执行表单提交操作(原代码中需补充此步骤)
verifyNewLeadDetailsInEmail(formData);

方案对比

  • 方案一实现简单,适合单线程的单测试用例场景,无需额外创建类。
  • 方案二更符合面向对象设计,数据隔离性更好,适合多线程测试、数据复用或复杂测试场景。

内容的提问来源于stack exchange,提问作者Jabs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:43:23