我刚接触硒,创建了Page工厂。这是我的情况:
我已经在类级别声明了一个公共arraylist(例如:List1),该数组存储了method1的值,当以相同的方法打印时,它可以正常工作。以相同的方式将arraylist(List2)存储在相同的类级别,该级别存储来自method2的值。
现在在方法2中比较List1和List2,打印时List2显示空白,所以我的代码失败了。
不确定什么是正确的方法
$statement = $pdo->prepare("SELECT * FROM users WHERE votes > :votes LIMIT 1");
$statement->execute(['votes' => 20]);
$userRow = $statement->fetch();
如果list1匹配列表2,则结果应显示通过。不确定如何将全局数组调用为其他方法。当我在方法2中调用List1时,结果显示为空白。
答案 0 :(得分:1)
我发现了问题。在创建方法和存储变量中,代码没有问题。问题出在测试脚本中,在一个测试中,我在方法所在的位置多次调用Class。我创建了Class的多个对象,这就是问题所在。我删除了多个对象,在一个对象中,我一个接一个地调用了所有方法。一切正常。
感谢大家的宝贵反馈,我也可以从其他答案中了解更多。
答案 1 :(得分:0)
您的代码似乎是正确的。但是,如果您的方法的执行顺序不同步,则其他方法中内置的列表可能具有空列表。要确认这一点,您可以在Method2中为列表一添加sysoout。通过为Method1添加优先级@Test(priority = 1)和为Method2添加@Test(priority = 2)可以解决您的问题。
答案 2 :(得分:-1)
ArrayList equals方法仅在两个列表按顺序包含相同数量的元素时才返回true,否则返回false。对两个列表进行排序,然后进行如下比较。
Collections.sort(list1);
Collections.sort(list2);
if(list1.equals(list2))
System.out.println("Pass");
else
System.out.println("Fail");
答案 3 :(得分:-1)
我建议您改变方法。以这种方式执行此操作将阻止并行执行,并可能导致问题,可能是您所看到的。
取而代之的是让Method1()
和Method2()
返回List<String>
,然后在测试脚本本身中进行比较(最好是来自TestNG或JUnit的Assert)。将页面对象更改为如下所示的内容。我删除了public
List1
和List2
,并在适当的方法Method1()
和Method2()
中创建了它们。这些方法返回列表,然后在测试脚本中进行比较。最好的做法是在测试脚本中进行验证,并避免在页面对象中进行验证。
public class AddNewCase {
WebDriver driver;
public AddNewCase(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
public List<String> Method1() throws Exception {
List<String> List1; // declared here, added to below
// ***some code***
return List1;
}
public List<String> Method2() throws Exception {
List<String> List2; // declared here, added to below
// ***some code***
return List2;
}
}
然后在测试脚本中添加一个断言。下面的一个正在使用TestNG。
assertEquals(addNewCase.Method1(), addNewCase.Method2(), "Verify the two lists are the same");