Я пытаюсь вызвать метод из другого класса с помощью 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();
}
Создайте 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));
}
}
Здесь есть несколько вещей:
Вы импортируете класс A в класс B, чтобы его можно было использовать.
Создайте экземпляр класса A для использования.
2а. ** (очень важный момент): ** Инициализировать ссылку на объект перед любыми методами тестирования. Заметьте, я сказал ссылку на объект.
2b. Создайте экземпляр объекта в методе setUp() или init() с аннотацией @Before, которая будет создавать экземпляр объекта до запуска каждого тестового метода. Это помогает сделать наши тесты независимыми друг от друга.
2с. Затем мы разыскиваем объект в методе cleanUp() и предлагаем запустить сборщик мусора, чтобы мы могли очистить объект от кучи.
3. Затем, чтобы получить доступ к полям класса A, мы можем использовать его методы getter и setter, которые мы сделали для него. 3a. Вам также необходимо инициализировать все поля, необходимые для передачи в конструкторе A, например WebDriver. Они инициализируются так же, как объекты, о которых я говорил в пункте 2.
Надеюсь, все это поможет!
Прежде всего вам не нужно вызывать test1.A()
. Это не метод, он публичный конструктор класса A
Если вам нужно получить private
url
переменной из другого класса, вы можете создать метод:
public String getUrl() {
return this.url;
}
и получить его в своем классе B
, вот так:
String url2 = test1.getUrl();
String url2 = test1.getUrl();
не для того, чтобы показать вам что-то, это для хранения вашей переменной url
из класса A
в переменную url2
. Чтобы показать, какое хранилище в url2
вам нужно System.out.println(test1.getUrl());
, И если переменная url
не пустая, она показывает, что есть в этой переменной url
.