问题标签 [pageobjects]

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 投票
6 回答
13885 浏览

ruby - 页面对象模型:为什么不在页面方法中包含断言?

第一次海报。我从事 UI 自动化工作多年,但最近才被介绍/指导使用页面对象模型。其中大部分是常识,包括我已经使用过的技术,但有一个特别好的点我无法在自己的脑海中证明,尽管广泛搜索了一个合理的解释。我希望这里有人可以启发我,因为当我尝试将 POM 与我自己的最佳实践集成时,这个问题引起了一些恐慌。

来自http://code.google.com/p/selenium/wiki/PageObjects

上面给出的代码显示了一个重要的点:测试,而不是 PageObjects,应该负责做出关于页面状态的断言......当然,与每条指南一样,也有例外......

来自http://seleniumhq.org/docs/06_test_design_considerations.html#chapter06-reference

页面对象的设计方式有很大的灵活性,但是有一些基本规则可以让您的测试代码获得所需的可维护性。页面对象本身不应该进行验证或断言。这是测试的一部分,应该始终在测试代码中,而不是在页面对象中。页面对象将包含页面的表示,以及页面通过方法提供的服务,但与正在测试的内容相关的代码不应包含在页面对象中。

有一个单一的验证可以而且应该在页面对象内,即验证页面以及页面上可能的关键元素是否正确加载。此验证应在实例化页面对象时完成。

这两个“指导方针”都允许潜在的例外情况,但我完全不同意基本前提。我习惯于在“页面方法”中进行大量验证,并且我认为验证的存在是一种在各种上下文中查找问题的强大技术(即,每次调用方法时都会进行验证)而不是而不仅仅是在特定测试的有限环境中发生。

例如,假设当您登录到 AUT 时,会出现一些文本,上面写着“以用户身份登录”。有一个单独的测试来专门验证它是合适的,但你为什么不想每次都验证它登录叫什么?这个工件与页面是否“加载正确”没有直接关系,一般来说也与“正在测试什么”没有关系,所以根据上面的POM指南,它显然不应该在页面方法中。 .. 但在我看来,它显然应该存在,通过尽可能多地验证重要工件,尽可能少地预先考虑,从而最大限度地发挥自动化的力量。将验证码放入页面方法中,通过允许您“免费”获得大量验证,而无需在测试中担心它,从而增加了自动化的力量,并且在不同的上下文中进行如此频繁的验证通常会发现您找不到的问题如果验证仅限于,例如,对该工件的单一测试。

换句话说,我倾向于区分特定于测试的验证和“一般”验证,并且我认为将后者广泛包含在页面方法中是完全合适/理想的。这促进了更精简的测试和更厚的页面对象,这通常通过重用更多代码来提高测试的可维护性——尽管这些指南中存在相反的争论。我错过了重点吗?不想在页面方法中进行验证的真正理由是什么?我描述的情况实际上是这些指南中描述的“例外”之一,因此实际上与 POM 不一致吗?提前感谢您的想法。-jn-

0 投票
2 回答
1758 浏览

java - Selenium,Java,PageObject 模式,层次结构破坏

我正在使用页面对象模式对我的 Web 应用程序交互进行建模。应用程序中的大多数页面都有一些标准选项,如“登录”、“注销”、“主页”等。此外,它们都有受保护的 WebDriver 引用。

所以我创建了一个所有页面都会继承的超超类——GrandpaClass。这将只包含一个受保护的 WebDriver 引用和一个用于初始化驱动程序的构造函数。

然后我创建了一个大多数页面都会继承的超类——PapaClass。它继承了GrandpaClass并添加了我上面列出的标准菜单功能(登录等)

当相同的菜单操作可能导致显示不同的页面时,就会出现问题。例如,当您注销时,您可以转到登录页面,也可以返回错误页面。但是由于登录功能在PapaClass中,这个类必须返回从他继承的不同页面。这使得超类依赖于它的子类。

我正在考虑使用诸如Strategy之类的东西来分解常见的菜单功能。所以PapaClass不会维护功能,只会维护对Menu对象的引用。

这是一个好主意,还是有更优雅(或更简单)的方法来解决这个问题?

谢谢。

0 投票
1 回答
2364 浏览

c# - Selenium FindBy 属性使用 Javascript 并在 C# 中等待

我正在使用 Selenium,并且我有以下用于执行 javascript 的扩展方法。

在我的 HomePage 类中,我具有以下属性。

但是,employerSelect 是由 Javascript 生成的,所以有没有办法做这样的事情:

本质上,我想将原始 ExecuteJs 调用替换为 FindsBy 属性的一部分,例如:

进入 FindsBy 属性的一部分,如下所示:

我可以扩展什么来做这样的事情?

0 投票
1 回答
827 浏览

asp.net - 将异常信息从 Global.asax 传递到 ErrorPage.aspx

我在 Global.asax 中有一个全局错误处理程序,并试图在名为 ErrorPage.aspx 的页面中显示异常信息。我已经阅读了微软关于在 asp.net 页面之间传递信息的页面 (http://msdn.microsoft.com/en-us/library/6c3yckfw.aspx)。我认为这些都行不通:

  • QueryString:我担心异常的长度会超过QueryString的最大长度。
  • 发布信息: Global.asax 页面没有任何表单字段。
  • 会话状态:会话状态在 Global.asax 中不可用
  • 公共价值观:我认为这仅适用于 .aspx 页面
  • 来自源页面的控件:Global.asax 不能有 asp.net 控件。

我目前的想法是创建 ErrorPage 对象的实例并导航到它是合乎逻辑的(就像您可以在 Windows 窗体应用程序中所做的那样),但我不知道如何做到这一点,或者在 asp 中是否可行。网。

最终,我正在寻找一种在标准 .aspx 页面中显示由全局错误处理程序捕获的错误的方法。任何的意见都将会有帮助。

0 投票
2 回答
1605 浏览

c# - Selenium 2 WebDriver 未按预期评估更新的 DOM

我在 C# 中使用 Selenium 2 WebDriver 来自动化输入页面。加载 DOM 时隐藏了一个验证摘要控件。这是它在额外负载下的外观。

当我的 pageObject 在 Selenium 中初始化时,WebElement 的 Displayed 属性设置为“false”。这是我所期望的。

单击提交按钮后,dom 更改为:

当我尝试通过以下方式访问 WebElement 时,发出单击验证后,Displayed 属性仍然为“false”并且附加的 div 不可见:

这真的应该工作吗?我是否应该期望 Selenium 足够精明地评估 DOM 的当前状态?它如何实际评估元素的 Displayed 属性?如果我查看 PageSource 属性,我确实看到了文本。我不明白为什么我没有看到 Selenium 反映我的变化。

0 投票
1 回答
640 浏览

java - 在页面对象模式中返回新页面对象有什么好处?

例如,如果我要测试 Google 搜索,页面对象模型返回新的 Google 搜索页面对象有什么好处?

例如

对比

谢谢您的帮助!

0 投票
1 回答
3437 浏览

webdriver - Java中使用PageFactory的Webdriver PageObject实现

这是我到目前为止所拥有的:

一个工作的基于 Webdriver 的 Java 类,它登录到应用程序并转到主页:

现在我们看到有 2 个页面: 1. 登录页面,我必须输入用户名和密码,以及主页,一旦身份验证成功,我将被带到哪里。

现在我想使用Pagefactory将它实现为PageObjects:所以我有:

对于登录页面,我不确定我将如何实现它,以及调用这些页面的测试。

0 投票
2 回答
104 浏览

ruby - 对象可以在方法执行之前重新初始化自己吗?

我可以在执行方法之前让对象重新初始化吗?我正在使用 Ruby 和 selenium 来测试一个网络应用程序,并且我正在尝试改进我的页面对象。例如

这是个好主意还是坏主意?还是有更好的方法来做到这一点?

0 投票
1 回答
4166 浏览

ruby - 您可以通过站点棱镜或仅通过 css 选择器按 id、标题、链接等查找元素吗?

通过使用 site-prism gem 进行集成测试,我可以通过引用 id 或 title 或 link 或 xpath 找到页面元素,还是只能通过 css 搜索它们

0 投票
1 回答
7599 浏览

java - Webdriver 错误“驱动程序信息:driver.version:未知”

我正在尝试从Page-Objects Example运行示例

它在 Windows 7 上运行良好,但是当我尝试在 Linux(Fedora 15)上运行它时出现错误:

我尝试将 System.setProperty 设置为:

但是得到了同样的错误。