有什么方法可以从单独的文件中获取存储在页面对象模型之后的元素的xpath?

时间:2019-02-22 14:25:00

标签: selenium selenium-webdriver xpath

假设我已将WebElment存储在 LoginPage.java 类中,如下所示。

@FindBy(xpath="//input[@name='user_name']") WebElement username;

现在从我的测试文件中说 VerifyLogin.java ,我想访问存储在 LoginPage.java 文件上方的用户名的xpath,类似这样的

LoginPage loginPage = PageFactory.initElements(driver, LoginPage.class);
loginPage.username;//then it should return the xpath //input[@name='user_name']

我知道上述方法是错误的,但是有什么方法可以只获取可以在VerifyLogin文件中使用的LoginPage文件中存储的xpath?

2 个答案:

答案 0 :(得分:1)

如果您在页面对象之外需要它,那么您的设计就不好了。

无论如何,如果您真的想要,以下应该完成工作

@FindBy(xpath="//input[@name='user_name']") 
public WebElement username;

new YourPageObject().username;

答案 1 :(得分:1)

不确定在完成xpath后为什么需要查看xpath,但是可以执行以下操作:

public final String xUserName = "//input[@name='user_name']";
@FindBy(xpath = xUserName)
public WebElement username;

final属性是必需的。

通过这种方式,您可以将路径存储为字符串,并在POM中使用该字符串,但仍可将其作为字符串读取。我以x开始String变量,所以我知道String是xpath格式的。以c开头的CSS选择器表示法。

我做了类似的事情有两个原因:

  1. 实际的xpath很大,因此我将其分成较小的可重用的String块。但是为此,我将字符串标记为私有。
  2. 我需要将字符串传递给其他Selenium方法,例如我创建的暂停类。

但是要回答直接的问题,,您不能从POM变量获取xpath,因为该信息未存储。该变量是一个WebElement,并且不在乎您为它分配了什么方法。就像问字符串是如何创建的。