Как использовать переменную в разных классах без ее изменения - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь использовать переменную, которую я взял в одном классе, а затем использовать эту переменную в других классах. Так что это мой код, и он в основном берет идентификатор из URL

public class GameId {

    public String game_id() {

        String currentURL = Drivers.getDriver().getCurrentUrl();
        String[] arrayURL = currentURL.split("/");
        int arrLength = arrayURL.length;
        final String gameID;
        gameID = arrayURL[arrLength - 1];
        System.out.println(gameID);
        return gameID;

    }
}

Я пытаюсь использовать это в своих тестах в другом классе, но это не дает мне тот же ответ, я пытаюсь утверждать, что этот идентификатор игры включен в URL на другой странице, но функция снова работает, поэтому значение меняется.

public void guest_login_from_pick_screen(){

    GameId gameid = new GameId();
    WebDriverWait wait = new WebDriverWait(Drivers.getDriver(), 10);
    gameid.game_id();
    wait.until(ExpectedConditions.urlMatches("https://web-game-stage.sportdec.com/games/"+ gameid.game_id()+"/join/"));

}

Я использую обе эти функции в своем тесте, но я хочу, чтобы значение первого экземпляра (gameid.game_id ();) использовалось во втором экземпляре (fixscreen.guest_login_from_pick_screen ();). Вот полный код

@Test
public void join_game_already_logged_in () throws Exception {

    Header header = new Header();
    Thread.sleep(3000);

    GameLobby gamelobby = new GameLobby();


    gamelobby.clickElementWithName("Test Game");

    gamelobby.select_game();


    LeaderBoard leaderboard = new LeaderBoard();
    GameId gameid = new GameId();
    gameid.game_id();
    leaderboard.numberOfUsers();
    leaderboard.joinGame();
    FixturesScreen fixscreen = new FixturesScreen();
    fixscreen.guest_login_from_pick_screen();
    fixscreen.four_picks_make();
    Thread.sleep(4000);
    fixscreen.picks_match_total();
    fixscreen.submit_picks();
    Login login = new Login();
    login.select_register_from_login();

    Register register = new Register();
    register.register_in_pick_screen();
    fixscreen.submit_picks();
    Thread.sleep(3000);
    PickReceipt pickReceipt = new PickReceipt();
    pickReceipt.your_in_the_game();

}

Ответы [ 4 ]

0 голосов
/ 05 июля 2018
public class GameId {

    public static String gameId = "";
    public String game_id() {

        String currentURL = Drivers.getDriver().getCurrentUrl();
        String[] arrayURL = currentURL.split("/");
        int arrLength = arrayURL.length;
        final String gameID;
        gameID = arrayURL[arrLength - 1];
        System.out.println(gameID);
        gameId  = gameID;
        return gameID;

    }
}

Создать объект GameId сразу, а затем со следующего раза использовать, как этот GameId.gameId

0 голосов
/ 05 июля 2018

Пожалуйста, сделайте переменную static следующим образом:

public static String url="www.example.com";

и тогда его можно использовать где угодно.

0 голосов
/ 05 июля 2018

Вам необходимо изменить свой класс GameID как синглтон-класс и использовать концепцию инкапсуляции. Так что он создаст один экземпляр и вы можете получить идентификатор текущей игры, как показано ниже

Вы должны изменить свой GameID, как показано ниже

public class GameId {
    private String currentGameId;
    private static GameId gameID;

    public static GameId getInstance(){
        if(gameID==null){
            gameID=new GameId();
        }
        return gameID;
    }

    public void setCurrentGameId(String id){
        currentGameId=id;
    }

    public String getCurrentGameId(){
        return currentGameId;
    }

    public void game_id() {
        String currentURL = Drivers.getDriver().getCurrentUrl();
        String[] arrayURL = currentURL.split("/");
        int arrLength = arrayURL.length;
        final String gameID;
        gameID = arrayURL[arrLength - 1];
        System.out.println(gameID);
        this.currentGameId=gameID;

    }
}

Вы можете получить текущий CaseID, просто вызвав метод getCurrentGameId.

public void guest_login_from_pick_screen(){

    GameId gameid =GameId.getInstance();
    WebDriverWait wait = new WebDriverWait(Drivers.getDriver(), 10);
    //gameid.currentGameId();//It will give the current CaseID from the GameID class
    wait.until(ExpectedConditions.urlMatches("https://web-game-stage.sportdec.com/games/"+gameid.getCurrentGameId()+"/join/"));
}

В вашем методе испытаний его следует изменить, как показано ниже

LeaderBoard leaderboard = new LeaderBoard();
GameId gameid = GameId.getInstance(); //It will create a new instance
gameid.game_id();//This method will be executed once and gameID will be updated in a variable called currentGameId.So, we can simply call the getCurrentGameId() method to get the current ID.
0 голосов
/ 05 июля 2018

пожалуйста, используйте следующий код: -

public void guest_login_from_pick_screen(){

    GameId gameid = new GameId();
    WebDriverWait wait = new WebDriverWait(Drivers.getDriver(), 10);
    String var = gameid.game_id();
    wait.until(ExpectedConditions.urlMatches("https://web-game-stage.sportdec.com/games/"+ var +"/join/"));

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...