Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 有没有办法从一个单独的文件中获取存储在页面对象模型后面的元素的xpath?_Selenium_Selenium Webdriver_Xpath - Fatal编程技术网

Selenium 有没有办法从一个单独的文件中获取存储在页面对象模型后面的元素的xpath?

Selenium 有没有办法从一个单独的文件中获取存储在页面对象模型后面的元素的xpath?,selenium,selenium-webdriver,xpath,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); loginP

假设我已将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']

我知道上面的方法是错误的,但是有没有办法只获取存储在LoginPage文件中的xpath,我可以在VerifyLogin文件中使用它

如果您需要在页面对象之外使用它,那么您的设计就不是很好

无论如何,如果你真的想要它,下面的工作应该做

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

newyourpageobject().username

如果您需要在页面对象之外使用它,那么您的设计就不是很好

无论如何,如果你真的想要它,下面的工作应该做

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

newyourpageobject().username

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

public final String xUserName = "//input[@name='user_name']";
@FindBy(xpath = xUserName)
public WebElement username;
final
属性是必需的

这样,您可以将路径存储为字符串,并在POM中使用该字符串,但它仍然可以作为字符串读取。我用
x
启动字符串变量,因此我知道字符串是xpath格式的。从CSS选择器符号的
c
开始

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

  • 实际的xpath非常庞大,因此我将其分解为更小的、可重用的字符串块。但为此,我将字符串标记为private
  • 我需要将字符串传递给其他Selenium方法,例如我创建的pause类

  • 但是要回答直接的问题,no,您无法从POM变量获取xpath,因为该信息没有存储。该变量是一个WebElement,它不关心您分配它的方法。这就像询问字符串是如何创建的。

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

    public final String xUserName = "//input[@name='user_name']";
    @FindBy(xpath = xUserName)
    public WebElement username;
    
    final
    属性是必需的

    这样,您可以将路径存储为字符串,并在POM中使用该字符串,但它仍然可以作为字符串读取。我用
    x
    启动字符串变量,因此我知道字符串是xpath格式的。从CSS选择器符号的
    c
    开始

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

  • 实际的xpath非常庞大,因此我将其分解为更小的、可重用的字符串块。但为此,我将字符串标记为private
  • 我需要将字符串传递给其他Selenium方法,例如我创建的pause类

  • 但是要回答直接的问题,no,您无法从POM变量获取xpath,因为该信息没有存储。该变量是一个WebElement,它不关心您分配它的方法。这就像问字符串是如何创建的。

    我很好奇为什么需要xpath本身,但要回答这个问题,我可能只需要在LoginPage中定义一个包含xpath的字符串变量并使用它。是的,我知道如果xpath存储为字符串变量,那么我就可以实现它,在这种情况下,我将错过页面对象模型特性,因为我正在使用@FindBy存储所有web元素,并基于页面创建方法。所以我不想改变它。你可以找到有用的信息我很好奇为什么你需要xpath本身,但为了回答这个问题,我可能只需要在LoginPage中定义一个包含xpath的字符串变量并使用它。是的,我知道如果xpath存储为字符串变量,那么我就可以实现它,在这种情况下,我将错过页面对象模型特性,因为我正在使用@FindBy存储所有web元素,并基于页面创建方法。所以我不想改变它。你可以找到有用的信息