我想在游戏桌上使用getter和setter

时间:2018-04-30 11:39:32

标签: java selenium testing automation

嗨我正在尝试为排行榜上的每个玩家设置一个人类,因为我不知道排行榜是多久我会尝试通过排行榜中的行数来循环人数。然后我试图“获得”每一行的点数并再次比较每一行以断言更高的数字是一个顶部,我以前从未使用过getters和setter而且似乎无法弄清楚如何做到这一点,任何帮助? ?

以下是我想要的每个人的信息代码,我需要找到player_picks,position和player_points。然后我需要比较每个玩家总数与每个玩家的数量,因为我沿着排行榜走下去。如果pick_total是相等的,那么我需要比较他们的积分总数。我已经尝试了几个星期,但有人建议制作一个玩家类,然后使用get和setter为每个人分配属性会更容易。那么我可以将player1与玩家2,玩家2和玩家3等进行比较。制造麻省病毒的原因是我每次都不知道列表的大小让我感到困惑。

下面是使用的代码,它给了我看起来“设置”的属性,但我不知道如何在人类中设置“人”,因为每次需要更改的人数(使用int大小)随着不同数量的人加入每场比赛。

我是新手,所以如果我不解释这个,请告诉我。

public void test_player_leaderboard_entry() {
    int size = playerRows.size();
    for (int i = 0; i < size; i++) {
        //Position
        String position_first_player = Drivers.getDriver().findElement(By.cssSelector("[data-qa-position-value='" + i + "']")).getText();
        //Points
        String points_player = Drivers.getDriver().findElement(By.cssSelector("[data-qa-points-value='" + i + "']")).getText();
        //Username
        String username_player = Drivers.getDriver().findElement(By.cssSelector("[data-qa-player-value='" + i + "']")).getText();
        //Row Number
        Integer row = i + 1;
        Integer total_of_won_and_looking_good = 0;
        //PICKS
        for (int pick_number = 1; pick_number < 5; pick_number++) {
            String pick_status = Drivers.getDriver().findElement(By.xpath("//*[@id='root']/div/main/section[2]/section/div/ol/a[" + row + "]/li/div[3]/div[" + pick_number + "]/div")).getAttribute("data-qa-pick-state");
            //System.out.println(pick_status);
            if (Integer.parseInt(pick_status) == 2 || Integer.parseInt(pick_status) == 1) {
                total_of_won_and_looking_good = total_of_won_and_looking_good + 1;

            }
            //System.out.println(total_of_won_and_looking_good);
        }

        //System.out.println("On row number " + row + " we find " + username_player + " in position " + position_first_player + " with " + total_of_won_and_looking_good + " correct picks and " + points_player + " points!");
    }
}

1 个答案:

答案 0 :(得分:0)

首先,您没有尝试为排行榜上的每个玩家设置人员类,您正在尝试设计Person类并为排行榜上的每个人行实例化Person对象。我会建议阅读Oracle Docs并了解有关课程和对象的更多信息。

在循环中,您将需要创建一个新的Person对象,刮取必要的值,使用该值调用相应的setter并将该player对象添加到集合中。 e.g。

Person p = new Person() //create new Person object
int points = Integer.parseInt(Drivers.getDriver().findElement(By.cssSelector("[data-qa-points-value='" + i + "']")).getText());
p.setPoints(points); //call setter for points field
personList.add(p); //add person to list

简单人类的示例可能如下所示。请注意,实现Comparable接口允许在存储在List或数组中时对Person对象进行排序。如下所示。

public class Person implements Comparable<Person> { 

    private int score;

    public Person() { }

    public void setScore(int score) { this.score = score; }

    public int getScore() { return this.score; }

    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person();
        p1.setScore(80);
        p2.setScore(90);
        List<Person> people = new ArrayList<>();
        people.add(p1);
        people.add(p2);
        System.out.println("Before sorting: " + people.toString());
        Collections.sort(people);
        System.out.println("After sorting: " + people.toString());
    }

    @Override
    public int compareTo(Person p) {
        if (p.getScore() > this.score)
            return 1;
        if (p.getScore() < this.score)
            return -1;
        return 0;
    }

    public String toString() {
        return String.format("Person -> score: %d", this.score);
    }
}