如何在同一类的两个方法间传递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
相关产品推荐
相关产品推荐

