Как можно вызвать метод из другого класса для теста

1

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

Итак, здесь мой класс A и B

вопрос: как я могу вызвать метод для получения текущего URL-адреса? спасибо

public class A{

    private String url;

    public A(WebDriver driver){       
        url = driver.getCurrentUrl();
        System.out.println("The current URL is:"+url);
        Util.wait(5);
        }


public class B {        

@BeforeClass
    public static void Log(){
    //some code here to check if log is ok
    }
@Test
    public void A(){
        A test1 = new A(driver);
        String url2 =test1.A();

    } 
Теги:
selenium-webdriver

2 ответа

0
Лучший ответ

Создайте getter и setter для строкового URL-адреса, чтобы вы могли получить доступ к нему публично:

public String getUrl() {
    return this.url;
}

Ох и сеттер:

public void setUrl(String url) {
    this.url = url;
}

Это следует за соглашениями Java Beans путем плотного инкапсуляции полей в класс, но с учетом того, что данные неизменяемы, ИЛИ сменяется при разрешении только желаемых данных.

Например, вы можете сказать, что URL-адрес не может быть длиннее 16 символов, если вы хотите (как пример):

public void setUrl(String url) {
    if (url.length() <= 16)
        this.url = url;
}

который затем предотвратит изменение URL-адреса для чего-либо длиной более 16 символов.

Затем вы можете вызвать его в своем тестовом классе:

@Test
public void getUrl_worksWithUrlLessThan16Length() {
    A test1 = new A(driver);
    String url = "www.google.com";
    A.setUrl(url);
    assertTrue(A.getUrl().equals(url));
} 

EDIT: Был высказан запрос о дальнейшей реализации. Следующим образом:

У вас есть два класса, класс A и класс B. Пусть говорят, что они оба находятся в своих файлах исходного кода. Итак, теперь у вас есть два файла, которые выглядят так:

A.java:

public class A {

    private String url;

    public A(WebDriver driver){       
        url = driver.getCurrentUrl();
        System.out.println("The current URL is:"+url);
        Util.wait(5);
    }

    public void setUrl(String url) {    //THIS IS A SETTER
        this.url = url;
    }

    public String getUrl() {            //THIS IS A GETTER
        return this.url;
    }

}

B.java:

package com.secondClasses.A;

import com.classes.B;

public class B {

A test1;
Webdriver driver;
String url2;

@BeforeClass
public static void Log(){
//some code here to check if log is ok
}

@Before
public void setUp() {
    driver = new WebDriver();
    test1 = new A(driver);
}

@After
public void cleanUp() {
    driver = null;
    test1 = null;
    url2 = null;
    System.gc();
}

@Test
public void A(){
    url2 = test1.getUrl();
    assertTrue(url2.equals(url));
}

}

Здесь есть несколько вещей:

  1. Вы импортируете класс A в класс B, чтобы его можно было использовать.

  2. Создайте экземпляр класса A для использования.

2а. ** (очень важный момент): ** Инициализировать ссылку на объект перед любыми методами тестирования. Заметьте, я сказал ссылку на объект.

2b. Создайте экземпляр объекта в методе setUp() или init() с аннотацией @Before, которая будет создавать экземпляр объекта до запуска каждого тестового метода. Это помогает сделать наши тесты независимыми друг от друга.

2с. Затем мы разыскиваем объект в методе cleanUp() и предлагаем запустить сборщик мусора, чтобы мы могли очистить объект от кучи.

3. Затем, чтобы получить доступ к полям класса A, мы можем использовать его методы getter и setter, которые мы сделали для него. 3a. Вам также необходимо инициализировать все поля, необходимые для передачи в конструкторе A, например WebDriver. Они инициализируются так же, как объекты, о которых я говорил в пункте 2.

Надеюсь, все это поможет!

  • 0
    Здесь я не понимаю, что делать и куда поместить три первых кода
  • 0
    Ну, ваши классы должны быть в отдельных файлах, или вам нужно избавиться от модификатора открытого доступа класса B. У вас также отсутствуют пропускающие скобки в обоих классах. Посмотрите мои изменения в моем посте через несколько минут, чтобы узнать больше и лучше. @ user3610075
0

Прежде всего вам не нужно вызывать test1.A(). Это не метод, он публичный конструктор класса A

Если вам нужно получить private url переменной из другого класса, вы можете создать метод:

public String getUrl() {
  return this.url;
}

и получить его в своем классе B, вот так:

String url2 = test1.getUrl();
  • 0
    Если я попробую ваш пример, он просто откроет пустую страницу
  • 0
    @ user3610075 Но это утверждение String url2 = test1.getUrl(); не для того, чтобы показать вам что-то, это для хранения вашей переменной url из класса A в переменную url2 . Чтобы показать, какое хранилище в url2 вам нужно System.out.println(test1.getUrl()); , И если переменная url не пустая, она показывает, что есть в этой переменной url .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню