在我的项目中使用JavaSelenium和Page Object,想要创建一个自定义方法,将两个字符串作为参数,组合它们并调用右webelement来执行一些操作。
下面的例子我的页面对象
public class Test extends Base {
public Test() {
PageFactory.initElements(driver, this);
}
@FindBy(xpath = "//div[@id='question1No']")
WebElement question1Yes;
@FindBy(xpath = "//div[@id='question1No']")
WebElement question1No;
public Object GetField(String answer, String question) {
Field field = null;
try {
field = Test.class.getField((question+answer).replace("\"", ""));
return field.get(this);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public void answerQuestion(String answer, String question) {
WebElement element = (WebElement)GetField(answer,question);
element.click();
}
例如,调用该方法:
answerQuestion("Yes", "question1")
调用此方法应执行click on question1Yes元素。
添加到上面的答案更新它根据操作需要以及包名称
import java.lang.reflect.Field;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Test extends base{
@FindBy(xpath = "//div[@id='question1No']")
public WebElement question1Yes;
@FindBy(xpath = "//div[@id='question1No']")
public WebElement question1No;
public Test() {
PageFactory.initElements(driver, this);
}
public void answerQuestion(String answer, String question) {
WebElement temp = null;
try {
Field field = Test.class.getField(question + answer);
temp = (WebElement) field.get(this);
temp.click();
} catch (Exception e) {
// Handle the exception here when there is wrong field
// throws NoSuchFieldException, SecurityException
e.printStackTrace();
}
}
}
还可以使用常用方法获取字段
public Object GetField(String answer, String question) {
Field field = null;
try {
field = Test.class.getField(question + answer);
return field.get(this);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
这样你的代码就会
import java.lang.reflect.Field;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Test extends base {
@FindBy(xpath = "//div[@id='question1No']")
public WebElement question1Yes;
@FindBy(xpath = "//div[@id='question1No']")
public WebElement question1No;
public Test() {
PageFactory.initElements(driver, this);
}
public void answerQuestion(String answer, String question) {
WebElement temp = (WebElement)GetField(answer,question);
temp.click();
}
public Object GetField(String answer, String question) {
Field field = null;
try {
field = Test.class.getField(question + answer);
return field.get(this);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
你可以使用反射。
Field field = Test.class.getField("question1Yes");
WebElement element = (WebElement) field.get(this);
然后你可以用你的网页元素做任何你想做的事
upd。如果字段是私有的,则写入字段。setAccessible(真)
问题内容: 在 Java 6中 ,假设我具有以下方法签名: 我想知道在运行时传递给任何其他参数的值,这里重要的一点是我想通过参数名称获取该值。 我知道如何使用或获取参数类型的列表。 理想情况下,我想获取参数 名称 而不是类型的列表。有办法吗? 问题答案: 如果您告诉编译器将其包括在内,则可以使用参数名称(使用调试信息进行编译)。Spring 可以帮助您获取名称。该默认实现使用ASM 这样做。 与您
问题内容: 给定以下Go方法: 我想反映参数的名称(在这里)。 我尝试了以下操作,但是它返回了结构名称(在这里): 如何获得参数名称? 问题答案: 无法获取方法或函数的参数名称。 这样做的原因是因为名称对于调用方法或函数的人并不是很重要。重要的是参数的类型及其顺序。 甲功能类型表示集合的具有相同参数和结果类型的所有功能。无论参数名称如何,具有相同参数和结果类型的2个函数的类型均相同。以下代码显示:
问题内容: 鉴于函数: 如何提取参数的数量和名称。即,鉴于我有提及func,因此我希望返回。 为此的使用场景是,我有一个装饰器,并且希望以与实际函数作为键一样的顺序使用方法参数。即,我打电话时装饰器的外观如何? 问题答案: 看一下模块-这将为你检查各种代码对象属性。 其他结果是 args和* kwargs变量的名称,以及提供的默认值。即。 请注意,在某些Python实现中,某些可调用对象可能不是自
我使用的是selenium pagefactory,并引入了一个注释@Name(Description=“Username”),用于所有WebElement。稍后,我需要在自定义方法中找到描述值,以便进行报告,例如: 我的@Name注释界面和pagefactory如下所示: 名称接口 在使用反射时,我面临的问题是需要定义pagefactory的类名,并提供字段名作为字符串“username”,以检
我有一个简单的测试套件(对这个例子来说非常简单)。我在构造函数上使用@Factory表示法和一个@DataProvider,它返回一个城市对象[][](多达100个),我运行我的测试。在这个例子中有3个@Test方法。如果我不将测试名称附加到城市名称,我将有一个超文本语言标记报告,它只会一遍又一遍地列出3个测试方法,无法区分它们。 我尝试过这样的例子:这里。 我的测试课做得很好。我遇到的问题是,当
问题内容: 我正在尝试在python3中编写一个简单的递归函数。在学习OO Java时,我还想编写涉及对象的Python代码。这是我的下面的代码。我提示用户输入一个数字,屏幕应该显示每个小到5的整数。 但是,当我在终端上运行它时,它说:“ NameError:未定义名称’recursive’”。错误如下所示: 是什么导致问题出在这里?我知道如何编写递归函数,给它一个参数,然后使其在终端上运行。但是