如何以不同的方法调用全局数组列表

时间:2019-06-28 09:09:16

标签: java selenium selenium-webdriver arraylist

我刚接触硒,创建了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时,结果显示为空白。

4 个答案:

答案 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 List1List2,并在适当的方法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");