如何通过反射以所需/正确的顺序调用方法
How to invoke methods in a required / correct sequence via reflection
我是 java 和 selenium 的新手,正在尝试通过使用 java 反射在 class A 中从 class B 中执行方法(测试)。这些方法正在被调用,也正在被执行。但问题是这些方法没有按照它们在 class A 中编写的顺序或按要求的顺序执行。
例如。 class A依次有以下方法:
1. Login
2. Go to Page 1 --> do some activity
3. Go to Page 2 --> do some activity
4. Go to Page 4 --> do some activity
5. Logout
当在 class B 中通过反射调用这些时,它会将序列更改为:
4. Go to Page 4 --> do some activity
2. Go to Page 1 --> do some activity
5. Logout
1. Login
2. Go to Page 1 --> do some activity
因此,该方法失败,因为第一步是登录,并且由于用户未登录,无法执行转到第 4 页 --> 做一些事情 activity。
如何使方法以正确的格式执行。有命名格式吗?
Class答:
public void Login()
{
//Some action;
}
public void GoToHomepage()
{
//Some action;
}
public void GotoPageOne(){
//Some action;
}
public void GotoPageTow(){
//Some action;
}
public void GotoPageThree(){
//Some action;
}
public void GotoPagefour(){
//Some action
}
Class B(通过反射从 class A 调用方法)
public static void main (String args[]){
public static Method[] method;
ClassA wa = new ClassA(driver);
method=wa.getClass().getDeclaredMethods();
for (int i=0;i<=method.length-1;i++){
System.out.println(method[i].getName());
method[i].invoke(wa);
这些方法的打印顺序与它们的执行顺序相同。
如果我做错了,请提出建议并告诉我。
根据 documentation 结果数组未排序。
您可以使用 Collections.sort()
对它们进行排序。
但一般来说,在它们的声明顺序之后调用它们并不是一个好主意,因为它在任何时候都不灵活。按顺序更改源代码会导致问题。请改变你的方法。
如果您想要一个连续的顺序,只需编写一个方法,它将按照您想要的顺序调用所有方法,如下所示:
class TestA {
private A aToTest = new A();
public void callSequence() {
aToTest.login();
aToTest.goToHomePage();
aToTest.goToPageOne();
...
}
}
class B {
public static void main (String args[]){
public static Method[] method;
Class<TesttA> clazz = TestA.class;
method = clazz.getDelcareMethods();
method[0].invoke();
}
我是 java 和 selenium 的新手,正在尝试通过使用 java 反射在 class A 中从 class B 中执行方法(测试)。这些方法正在被调用,也正在被执行。但问题是这些方法没有按照它们在 class A 中编写的顺序或按要求的顺序执行。
例如。 class A依次有以下方法:
1. Login
2. Go to Page 1 --> do some activity
3. Go to Page 2 --> do some activity
4. Go to Page 4 --> do some activity
5. Logout
当在 class B 中通过反射调用这些时,它会将序列更改为:
4. Go to Page 4 --> do some activity
2. Go to Page 1 --> do some activity
5. Logout
1. Login
2. Go to Page 1 --> do some activity
因此,该方法失败,因为第一步是登录,并且由于用户未登录,无法执行转到第 4 页 --> 做一些事情 activity。
如何使方法以正确的格式执行。有命名格式吗?
Class答:
public void Login()
{
//Some action;
}
public void GoToHomepage()
{
//Some action;
}
public void GotoPageOne(){
//Some action;
}
public void GotoPageTow(){
//Some action;
}
public void GotoPageThree(){
//Some action;
}
public void GotoPagefour(){
//Some action
}
Class B(通过反射从 class A 调用方法)
public static void main (String args[]){
public static Method[] method;
ClassA wa = new ClassA(driver);
method=wa.getClass().getDeclaredMethods();
for (int i=0;i<=method.length-1;i++){
System.out.println(method[i].getName());
method[i].invoke(wa);
这些方法的打印顺序与它们的执行顺序相同。
如果我做错了,请提出建议并告诉我。
根据 documentation 结果数组未排序。
您可以使用 Collections.sort()
对它们进行排序。
但一般来说,在它们的声明顺序之后调用它们并不是一个好主意,因为它在任何时候都不灵活。按顺序更改源代码会导致问题。请改变你的方法。
如果您想要一个连续的顺序,只需编写一个方法,它将按照您想要的顺序调用所有方法,如下所示:
class TestA {
private A aToTest = new A();
public void callSequence() {
aToTest.login();
aToTest.goToHomePage();
aToTest.goToPageOne();
...
}
}
class B {
public static void main (String args[]){
public static Method[] method;
Class<TesttA> clazz = TestA.class;
method = clazz.getDelcareMethods();
method[0].invoke();
}