问题标签 [page-factory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
306 浏览

selenium - 我们如何在@FindBy 中使用动态字符串制作选择器

我已将我的 Selenium testNG 套件与 Jenkins 构建集成。根据构建发生的环境,触发自动化脚本。我使用“mvn clean test -Denv=" 命令将环境信息从 Jenkins 发送到自动化代码。我成功地在我的脚本中使用这个环境值来区分不同环境中的数据。

但是,我的一些 Xpath 具有不同的数据,具体取决于 text()='something environment specific' 等环境。我无法在运行时在 @FindBy 中提供动态字符串,因为此注释不允许这样做。

请就这个问题提出任何线索,因为我愿意坚持使用页面工厂方法。

0 投票
3 回答
108 浏览

java - 在 POM uisng 页面工厂中获取 java.lang.NullPointerException

我在下面发布了一些到目前为止我已经完成的示例代码,我得到了一个 Exception java.lang.NullPointerException

基类:

登录页面:

登录测试类:

我正在NullPointerException设置用户名和密码。请你帮助我好吗?

我是使用 PageFactory 的 POM 的新手,所以我不知道如何解决它,但如果有人可以帮助我,那对我会有很大帮助。

0 投票
2 回答
507 浏览

java - 放置在单独的测试类中时代码不执行

我正在PageFactory使用 maven+TestNG 为网站编写一个框架,我有页面明智的PageObject类,其中存在所有特定于页面的 Web 元素和操作,例如LoginPageObjectAccountSelectionPageObject......
我有一个类“Base”,其中 WebDriver、Logger 等常见元素是展示。我有一个类“BasePage”,其中存在单击、滚动、选择、刷新等常见操作...

MyTestng.xml<class>对所有单独的页面都有单独的条目。只是我正在初始化浏览器对象@BeforeSuiit并将其存储/放置在基类中,该基类正在我的测试类中扩展下面是我为我的项目提出的流程/架构。 问题:在此处输入图像描述

我的每个测试类中都有多个 @Test。当我的测试类单独执行时,所有@Test 脚本都会执行,但是当我连续执行它们时,即我的testng 文件对我的所有测试类都有单独的条目,我的执行失败。错误说无法在页面上找到元素,我有等待语句,但它仍然无法正常工作。

我已经尝试调试代码,但无法找到原因,因为流程在第二页开始时停止,异常说元素未找到

代码:

预期:
即使代码页分开,代码也应该完全执行。

实际:
当我在一个测试类中拥有所有页面代码时,执行代码。但是当我将它们分别放在页面测试类中时,会引发 element not found 异常。

0 投票
1 回答
1052 浏览

java - 如何解决无法设置 io.appium.java_client.android.AndroidElement 错误

我正在尝试使用 Page Factory 将元素与我的 Base Test 和 Test runner 分开,但是当我运行它时它返回一个错误。有人可以在我的代码中帮助我吗?

我已经尝试在谷歌上搜索修复但没有任何效果

公共类 BaseTest {

}

公共类主页扩展 BaseTest {

公共类 SampleGoogle 扩展 BaseTest {

预期的结果应该是 Chrome 将在我的模拟器上打开,然后测试将写入搜索栏中,但是当我运行代码时返回错误。

失败:示例 java.lang.IllegalArgumentException:无法在 sun.reflect 处将 io.appium.java_client.android.AndroidElement 字段 com.google.HomePage.searchTxt 设置为 org.openqa.selenium.remote.RemoteWebElement$$EnhancerByCGLIB$$d27c0df4。 UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source) at sun.reflect.UnsafeObjectFieldAccessorImpl.set(Unknown Source) at java.lang.reflect.Field.set(Unknown Source) at org.openqa。 selenium.support.PageFactory.proxyFields(PageFactory.java:117) 在 org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:105) 在 com.google.HomePage.(HomePage.java:21) 在 com。 sun.reflect.NativeMethodAccessorImpl 中的 testcases.SampleGoogle.Sample(SampleGoogle.java:17)。在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 在 java.lang.reflect.Method.invoke(Unknown Source) 在 org.testng.internal 的 invoke0(Native Method)。 MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108) at org.testng.internal.Invoker.invokeMethod(Invoker.java:661) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869) at org.testng.internal .Invoker.invokeTestMethods(Invoker.java:1193) 在 org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126) 在 org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) 在 org.testng。 TestRunner.privateRun(TestRunner.java:744) at org.testng.TestRunner.run(TestRunner.java:602) at org.testng.SuiteRunner.runTest(SuiteRunner.java:380) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340) at org.testng.SuiteRunner.run(SuiteRunner.java:289) at org. testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301) at org.testng.TestNG.runSuitesLocally (TestNG.java:1226) 在 org.testng.TestNG.runSuites(TestNG.java:1144) 在 org.testng.TestNG.run(TestNG.java:1115) 在 org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG. java:126) 在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58)SuiteRunner.privateRun(SuiteRunner.java:340) at org.testng.SuiteRunner.run(SuiteRunner.java:289) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker .java:86) 在 org.testng.TestNG.runSuitesSequentially(TestNG.java:1301) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:1226) 在 org.testng.TestNG.runSuites(TestNG.java:1144)在 org.testng.TestNG.run(TestNG.java:1115) 在 org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126) 在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137) 在org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58)SuiteRunner.privateRun(SuiteRunner.java:340) at org.testng.SuiteRunner.run(SuiteRunner.java:289) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker .java:86) 在 org.testng.TestNG.runSuitesSequentially(TestNG.java:1301) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:1226) 在 org.testng.TestNG.runSuites(TestNG.java:1144)在 org.testng.TestNG.run(TestNG.java:1115) 在 org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126) 在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137) 在org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58)52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301) at org.testng.TestNG.runSuitesLocally(TestNG.java:1226) at org. testng.TestNG.runSuites(TestNG.java:1144) at org.testng.TestNG.run(TestNG.java:1115) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126) at org.testng.remote .RemoteTestNG.initAndRun(RemoteTestNG.java:137) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58)52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301) at org.testng.TestNG.runSuitesLocally(TestNG.java:1226) at org. testng.TestNG.runSuites(TestNG.java:1144) at org.testng.TestNG.run(TestNG.java:1115) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126) at org.testng.remote .RemoteTestNG.initAndRun(RemoteTestNG.java:137) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58)在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58) 运行(AbstractRemoteTestNG.java:126)在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58) 运行(AbstractRemoteTestNG.java:126)

0 投票
1 回答
1189 浏览

java - 如何在页面对象模型类-Java 中使用鼠标悬停动作?

我正在使用页面对象模型和 testNG 练习 slenium-java。我试图在 spicejet 网站上做注册场景。我可以轻松访问 url,但要注册,我们必须将鼠标悬停在登录/注册按钮上,然后我们必须单击注册。我试图在我的一个页面对象类中执行鼠标悬停操作,但这是一个错误。

我已经尝试在主页而不是页面对象类中初始化操作类,但这也没有产生任何结果。

页面对象类

主班

错误信息

这是我收到的错误消息。

0 投票
3 回答
901 浏览

java - 尝试在两个浏览器中运行 Selenium Cucumber 测试时,测试仅在一个浏览器中运行

我在尝试在两个浏览器(Chrome、Firefox)中运行 selenium cucumber java 脚本时被卡住了。当我使用单个浏览器时,测试工作正常。我使用 selenium PageFactory 类来初始化 Web 元素。

问题是当我对两个浏览器运行测试时,第一个浏览器打开,导航到 URL,然后什么也没有发生。Web 元素未初始化。测试转到第二个浏览器,导航到 URL,初始化 Web 元素,后续测试方法 ( testMethod1) 按预期运行。为什么测试没有在第一个浏览器上运行?

这是包含 Web 元素的 PageFactory BasePage 类:

这是测试类以及我如何尝试在两个浏览器中运行测试:

浏览器初始化后,此方法在第二个浏览器(Firefox)中运行正常,但在第一个浏览器(Chrome)中根本没有运行:

我的怀疑是无法在一次运行中为两个浏览器启动 PageFacory,但我不知道如何进一步诊断。也可能是for循环错误。

0 投票
2 回答
658 浏览

java - 如何将参数传递给 selenium 中的页面工厂方法以获取特定的搜索结果?

在我的项目中,我得到了一堆搜索结果。现在我想根据用户参数单击特定元素。使用页面工厂设计模式

EbayPage.java - PageFatory

EbayTest.java - 测试用例

提前致谢。

0 投票
1 回答
55 浏览

instance - pagefactory.initelements 和 Class 实例的区别

我是java新手。

  1. 我无法理解 Pagefactory.initelements 和 Class 实例之间的区别。有人可以帮我吗?这个问题的原因是:

我能看到的唯一区别是 webelement 初始化,除此之外什么都没有。两者都可用于访问类变量和方法。

  1. Somename.class 会和 'new someclass()' 做同样的事情吗?
0 投票
2 回答
861 浏览

java - 使用反射获取 Pagefactory WebElement 名称

我正在使用 selenium pagefactory,并引入了一个注释 @Name(Description = "Username"),我将其用于所有 WebElement。稍后我需要在我的自定义方法中找到 Description 的值,以进行报告,例如:

我的@Name 注释界面和 pagefactory 如下所示:

名称接口

我在使用反射时遇到的问题是需要定义 pagefactory 的类名,并将字段名作为字符串 "username" 提供,以检索注释值。

我希望能够通过仅向我的 click(WebElement element) 方法提供我的 WebElement 而没有其他对象来检索注释值。

0 投票
1 回答
1458 浏览

java - 使用 PageFactory 初始化 PageObjects 的不同方法

我正在尝试在页面对象模型中构建一个 Cucumber Java 框架。我已经创建了基本框架并且工作正常,但是对如何初始化页面感到困惑。我注意到在大多数教程中,他们已经在构造函数本身中初始化了页面。

例子:

同样在所有页面类中,它们initElements在构造函数本身中添加了方法。

但是在某些站点上,我注意到不是在构造函数中初始化所有页面,而是在构造函数中初始化的第一页以及在某些方法的返回语句中初始化的所有其他页面(最后在当前页面中执行)。如果方法“login”是 中的最后一个方法LoginPage.java,那么它将初始化HomePage为返回类型。

例子:

我的疑问:哪一种是正确的实施方法和有效的方法?