问题标签 [site-prism]

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 回答
199 浏览

capybara - 是否可以将类变量与 SitePrism 模块一起使用

我正在编写一个测试步骤,我需要为 Capybara 的page.check()方法提供名称值为我的复选框的名称值为checkbox_name. 我想将它保存为我的页面对象模型中的类变量,如下所示:

然后,我会在我的测试步骤中调用它。

事情是当我尝试这个或使用实例变量时,我得到一个undefined method错误。有什么方法可以从页面对象模型中调用此常量或在 SitePrism 中识别它?

0 投票
1 回答
326 浏览

ruby - 无法将 RSpec::Matchers 与 binding.pry 一起使用

我正在使用 Cucumber、Ruby 和 SitePrism 类。我试图在 SitePrism 类中进行断言,并且在包含 RSpec::Matchers 时设法使用了“期望”方法,但是,我使用“binding.pry”进行调试,我刚刚注意到我不是能够再使用它,因为它不断失败并出现以下错误:

NoMethodError:为#RSpec::Matchers::BuiltIn::Output:0x0000000a5536b0 调用私有方法`print'> 你的意思是?printf sprintf

你知道错误可能是什么吗?我尝试了不同的方法来包含 RSpec::Matchers,所以不确定我是否做错了什么?

0 投票
2 回答
111 浏览

ruby - 是否可以在 SitePrism 页面中使用“步骤”?

我正在使用 cucumber-ruby 框架,我们正在使用 Capybara 和 SitePrism 来驱动浏览器。

我有一种情况,如果发生错误,我想重试一系列步骤,所以我在 SitePrism 页面中放置了一个带有逻辑的方法,如下所示:

我发现的问题是,当达到这部分代码时,执行失败:

知道我是否可以在 SitePrism 页面中使用步骤?

谢谢!

0 投票
1 回答
741 浏览

ruby-on-rails - 具有有效 Capybara 元素的 send_keys 的未定义方法

我正在尝试调用.send_keys我使用 siteprism 页面模型检索到的 Capybara 元素。

页面模型的相关部分:

在 Rails 控制台中,我可以运行:

这对我来说意味着我有一个 Capybara 元素,这正是文档所说的我可以调用.send_keys的内容。但是当我运行时:

为了进一步加强这一点,我可以.set "some text"毫无问题地调用相同的元素。我错过了什么?

0 投票
1 回答
431 浏览

ruby-on-rails - 使用 capybara/rspec 通过具有相似 id 的选择器查找元素/部分

我想使用 SitePrsim 创建页面对象。页面上元素的选择器采用“service_id”形式。如何在单个页面中查找 id 不同但选择器包含关键字“service_”的所有元素/部分?

我努力了:

我正在寻找的元素如下所示:

所有这些元素都是来自:

0 投票
2 回答
308 浏览

ruby - Capybara 和 SitePrism 的断言风格是什么?

我正在使用PageObject模式,它将 HTML 细节从测试的顶层抽象出来。我正在使用SitePrism gem 执行此操作。

在我的示例中,我有一个主页(HomePage.rb):

它指的是一个常见的页面部分,HeaderSection ( HeaderSection.rb ):

以及我的测试的步骤定义(login.rb):

我不想将 Web 元素暴露给步骤定义,而是将其封装在HomePage的类方法中。似乎最好的方法是将断言放入HomePage本身(HomePage.rb)中的类方法中:

以上假设我也在使用include RSpec::Matchers.

我的方法将是唯一暴露给步骤定义(login.rb)的方法:

作为 SitePrism 的一部分,该sign_in_button元素有自己的内置方法来检查其是否存在,即:

问题

就最佳实践而言,这是在方法中编写此断言的最推荐方式amILoggedIn(即使看起来它们都使用相同的指令),

或者

0 投票
2 回答
517 浏览

ruby-on-rails - '未定义的局部变量或方法'期望导出到帮助器中的方法

目标:由于验证错误,尝试提交空注册表失败。预期以单行(方法)的形式出现在场景中。对错误的位置进行非常精确的检查。我不想使用经典计数,直到这是唯一的方法。


方法:
1. 将特定错误定义为页面中的元素


2.创建error_alerts.rb帮助器以一种方法存储期望

障碍: 错误是默认的 rails 错误,因此它们没有被定义为翻译,我在同一约定的另一个规范中使用了它,并且一切都完美无缺。

例子:

失败:我收到以下错误。

1# 我的方式 - 每个对象都会出现同样的问题|validation_errors|

2#经典期待

问题:经过一些修改后,我的方法在技术上是否可行,或者唯一的解决方案是使用经典计数方法?可以循环遍历页面的元素吗?这是其类似用法的示例,尽管期望是字符串,并且循环本身包含在规范的场景中,而不是在帮助程序中导出到外部方法。

0 投票
1 回答
296 浏览

ruby - Firefox 和 Chrome Selenium 网络驱动程序与 Capybara 和 SitePrism 的行为不同

我有一个包含 2 个文本字段和一个提交按钮的登录页面。只有在正确填写文本字段时才会启用提交按钮。

我正在使用 Capybara 和 SitePrism 来识别SignInPage该类的 Web 元素:

并与同一类的方法中的那些交互:

然后我的步骤定义调用该方法:

使用chromedriver运行我的测试时,所有文本字段都已填充,启用登录按钮,然后通过另一种方法验证并按下该按钮。使用geckodriver,我收到以下错误:

使用sleeps 进行诊断,结果发现密码文本字段没有被填充,因为焦点没有通过简单地设置到它password_field.set password。唯一的方法是,我可以让测试像chromedriver一样运行,它取消注释行,# password_field.click.

Selenium webdrivers之间应该有这么大的区别吗?毕竟,可以说添加额外click内容更多地代表了人为驱动的行为,另一方面,可以说我必须引入不必要的步骤才能使其发挥作用。

值得注意的宝石版本:

网络驱动程序:

0 投票
1 回答
381 浏览

ruby - 如何使用带有路径的可选变量的 URI 模板

我正在使用站点棱镜来创建一个可能有 2 个 url 的页面对象。Site_prism 使用 Addressable::Template,它使用 URI 模板 RFC 6570。

所需的页面包含一个元素列表,但也可以没有,并且根据这个逻辑定义了 2 个可能的 URL。

如果页面没有元素,则 URL 为example.com/foo 如果页面有元素,它将选择第一个重定向到example.com/foo/1/bar

我正在尝试为页面创建一个 url 模板,以便我可以有两个可能的输出之一。

案例 1:Page.new.load=>example.com/foo
案例 2:Page.new.load(id: 1)=>example.com/foo/1/bar

到目前为止我得到的解决方案是:
set_url '/foo{/id,path}' Page.new.load(id: 1, path: 'bar')
这适用于案例 1,但不适用于案例 2,因为它需要 2 个变量。

set_url '/foo{/path*}' Page.new.load(path: [1, 'path'])
这同样适用于案例 1,但不适用于案例 2。

我需要的是一个 uri 模板,它附加了一个路径,但前提是变量存在。就像是:/foo{/id,path("bar")}

具有默认值的变量,或仅与已定义变量一起存在的路径。

提前致谢。

0 投票
1 回答
387 浏览

ruby - 单击页面上使用带有 siteprism 的 capybara 获得相同课程的按钮

有 20 个不同的按钮可以期待,需要点击才能期待和验证代码中的 url。我尝试了不同的方法来实现我的测试,但它们都失败了。

我正在尝试类似的东西:

我收到此错误:

ArgumentError:无效键:class,应该是以下之一:count,:minimum,:maximum,:between,:text,:visible,:exact,:match,:wait

任何人都可以在代码中帮助我如何执行获取所有 20 个按钮的元素、存储它们并单击它们以在关闭它之前期望它们中的每一个