Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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
Java 在selenium自动化测试框架中保存对象存储库的最佳方法是什么_Java_Selenium_Xpath_Webdriver - Fatal编程技术网

Java 在selenium自动化测试框架中保存对象存储库的最佳方法是什么

Java 在selenium自动化测试框架中保存对象存储库的最佳方法是什么,java,selenium,xpath,webdriver,Java,Selenium,Xpath,Webdriver,我的xpath值是动态的-示例- //label[text()=$USERNAME$]-我将在测试中用值“admin1”替换$USERNAME$。我可以点击管理员,它需要我编辑页面 需要考虑执行内存时间、可靠性和测试性能的解决方案 选择权 1.在每个页面类中将其作为私有静态最终字符串,并为每个对象使用getter方法 将其作为键值对保存在属性文件中加载文件并在需要时获取值。(为每个对象创建一个带有静态gettermethods的静态类,这些对象调用一个方法来加载properties实例(prop

我的xpath值是动态的-示例- //label[text()=$USERNAME$]-我将在测试中用值“admin1”替换$USERNAME$。我可以点击管理员,它需要我编辑页面

需要考虑执行内存时间、可靠性和测试性能的解决方案

选择权 1.在每个页面类中将其作为私有静态最终字符串,并为每个对象使用getter方法

  • 将其作为键值对保存在属性文件中加载文件并在需要时获取值。(为每个对象创建一个带有静态gettermethods的静态类,这些对象调用一个方法来加载properties实例(properties实例不是静态的-值不会保留在内存中-我想)并获取键值,然后以字符串形式返回值。是否关闭加载的文件

  • @findby不能使用,因为我的测试对同一个xpath有不同的值

  • 还有其他选择吗


  • 您可以将所有对象定位器保存在Excel或JSON文件中。 我将所有XPath保存在Excel中,并使用以下列:

  • ElementName—为每个元素指定的唯一名称
  • 定位器-它可以包含xpath、css、类名等
  • 类型-它类似于用于标识其类型的定位器的指示(例如:ID、XPATH、CSS、类、文本、名称)
  • PageName-这仅用于定义哪些页面元素的信息目的 属于
  • 对于您的案例//label[text()=$USERNAME$],您不需要在Excel中定义此完整xpath。只需使用文本类型即可。请参考以下示例:

    在从excel读取定位器时,可以生成xpath
    ./*[text()='LOCATOR\u VALUE\u READ\u FROM\u REPOSITORY']

    您可以将所有对象定位器保存在Excel或JSON文件中。 我将所有XPath保存在Excel中,并使用以下列:

  • ElementName—为每个元素指定的唯一名称
  • 定位器-它可以包含xpath、css、类名等
  • 类型-它类似于用于标识其类型的定位器的指示(例如:ID、XPATH、CSS、类、文本、名称)
  • PageName-这仅用于定义哪些页面元素的信息目的 属于
  • 对于您的案例//label[text()=$USERNAME$],您不需要在Excel中定义此完整xpath。只需使用文本类型即可。请参考以下示例:

    在从excel读取定位器时,可以生成xpath
    ./*[text()='LOCATOR\u VALUE\u READ\u FROM\u REPOSITORY']

    您可以创建私有方法“private String getLocator(String userName)”@VitaliyMoskalyuk上述1和2选项都使用了您提到的方法签名。我的问题是将其保留为String(我的xpath值)或者将其保存在属性文件中,哪种技术在内存、执行时间等方面是有效的解决方案。我完全不使用动态XPath,因为正如您所提到的,@FindBy不能使用它们。我同意它们可能非常方便,但我更喜欢使用pagefactory和FindBy的页面对象模型(编辑让我删除了额外的@),这是我必须付出的代价。总有不止一种方法(嗯,几乎总是)为了访问web元素,我寻找了另一种方法。我发现我的测试使用POM比以前更快、更健壮。@BillHileman的意思是为每个用户创建findby并在测试中使用它们?我的理解正确吗?不,我认为您应该使用xpath通过它以前的同级来访问它,或者如果这是一个使用列表的话rs创建一个元素数组并进行搜索您可以创建私有方法“private String getLocator(String userName)”@VitaliyMoskalyuk上述1和2个选项都使用了您提到的方法签名。我的问题是将其保留为String(我的xpath值)或者将其保存在属性文件中,哪种技术在内存、执行时间等方面是有效的解决方案。我完全不使用动态XPath,因为正如您所提到的,@FindBy不能使用它们。我同意它们可能非常方便,但我更喜欢使用pagefactory和FindBy的页面对象模型(编辑让我删除了额外的@),这是我必须付出的代价。总有不止一种方法(嗯,几乎总是)为了访问web元素,我寻找了另一种方法。我发现我的测试使用POM比以前更快、更健壮。@BillHileman的意思是为每个用户创建findby并在测试中使用它们?我的理解正确吗?不,我认为您应该使用xpath通过它以前的同级来访问它,或者如果这是一个使用列表的话rs创建一个元素数组并以这种方式进行搜索