Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 在页面对象模型框架中存储数据的最佳方式是什么_Java_Selenium_Selenium Webdriver_Datastore_Pageobjects - Fatal编程技术网

Java 在页面对象模型框架中存储数据的最佳方式是什么

Java 在页面对象模型框架中存储数据的最佳方式是什么,java,selenium,selenium-webdriver,datastore,pageobjects,Java,Selenium,Selenium Webdriver,Datastore,Pageobjects,Im使用页面对象设计模式在selenium中构建自动化框架。 下面是我使用的一些数据以及我存储它们的位置 PageObjects xpath、id等-在页面类本身中 属性文件中的配置数据等待时间、浏览器类型、URL等。 其他数据-在类中作为静态变量。 一旦框架开始增长,就很难存储所有数据,也很难组织数据。我研究了其他人是如何实现他们在框架中存储数据的方式的。这是我发现的 将数据主要存储在类本身的页面对象中 用JSON存储数据 有些人甚至建议将数据存储在数据库中,这样可以减少读取时间 既然有很多选

Im使用页面对象设计模式在selenium中构建自动化框架。 下面是我使用的一些数据以及我存储它们的位置

PageObjects xpath、id等-在页面类本身中 属性文件中的配置数据等待时间、浏览器类型、URL等。 其他数据-在类中作为静态变量。 一旦框架开始增长,就很难存储所有数据,也很难组织数据。我研究了其他人是如何实现他们在框架中存储数据的方式的。这是我发现的

将数据主要存储在类本身的页面对象中 用JSON存储数据 有些人甚至建议将数据存储在数据库中,这样可以减少读取时间
既然有很多选择,我想得到一些关于什么是存储数据的最佳方式以及其他人如何存储数据的反馈。

JSON或任何临时数据存储都是最佳选择,因为它是一个框架,其目的是为不同的项目重用。

我建议使用每个设备类型的接口来存储多个类型选择器,例如:

import static org.openqa.selenium.By.cssSelector;
import static org.openqa.selenium.By.linkText;
import static org.openqa.selenium.By.xpath;

public interface DesktopMainPageSelector {
    By FIRST_ELEMENT = cssSelector("selector_here");
    By SECOND_ELEMENT = xpath("selector_here");
    By THIRD_ELEMENT = id("selector_here");
}
然后,只需根据需要实现这些选择器

对于更复杂的结构,也可以使用枚举


我发现这是最好的解决方案,因为它很容易管理大量选择器

我认为您存储数据的方式没有任何问题

POM定义的定位器应该存储在页面对象本身中。 配置数据可以存储在某种配置文件中。。。只要你觉得方便。您可以使用纯文本、JSON、XML等。我们使用XML,但这实际上取决于个人偏好。 我想这也不错。
框架并没有真正增长,自动化套件却在增长。只要你把上面3个地方的数据保持一致,我想你应该会没事的。我在使用这种方法时遇到的唯一问题是,有时某些页面上有很多功能,因此页面对象会变得相当大。在这些情况下,我们找到了一种将页面划分为更小的块的方法,例如,一个页面有22个选项卡,每个选项卡由不同的面板组成。在这种情况下,我们将page对象拆分为22个不同的类文件,以使其大小更易于管理,然后将它们作为属性连接回主页面,例如mainPage.Panel1.someMethodOnPanel1

请阅读原因。粘贴代码并正确格式化。我个人认为这不是一个好的最佳实践解决方案。所有这些字段都是有效的公共静态final,这是有缺点的。封装就是其中之一,您将无法对不需要了解这些字段的其他类隐藏这些字段。它们都是静态的,这意味着它们代表全局状态,而不是特定页面的属性。最后,这看起来像是一个穷人的混血儿,这可能会在以后引入bug。如果您有许多这样的解决方案,并且其中两个定义了相同的成员名称,那么如果您同时实现这两个,您将遇到问题。我认为简单地使用组合而不是继承来重新处理相同的解决方案将使这一方法成为一种可靠的方法。将包含定位器的容器对象分配给要使用的实例字段,而不是实现接口以获得功能的页面。这确保了这些定位器的集合保持在一个独立和可控的范围内,将全局状态保持在最小值,并且通过模式鼓励OOP设计,这与良好的页面对象实现保持一致。我不同意,问题是,实际上我将在其他流中使用这些选择器,因为页面类是不好的imho。让我解释清楚。由于构建测试框架不是简单的测试,我决定使用这个系统来构建不同的流,因此将它们放在一个接口中,无论何时需要它们,都可以轻松访问它们,每个流都根据从高层传递的属性进行封装和委派,结果是:一个测试将针对移动设备/台式机/平板电脑/任何东西运行,最后,我们得到了一个复杂的框架,其中包含愚蠢的简单测试方法,非程序员可以使用。