问题标签 [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 回答
1259 浏览

ruby - 如何从水豚元素中提取硒元素?

我对 Java 和 Selenium 比对 Ruby 和 Capybara 和 SitePrism 更熟悉,所以如果这个问题相当厚重,我深表歉意。

Selenium 有一个非常有用的类来管理 Select 标签,Selenium::WebDriver::Support::Select,可以通过向它传递代表选择的 Selenium 元素 ( Selenium::WebDriver::Element ) 来创建它。我想得到一个 Select 对象,这样我就可以使用它方便的方法。

但是,使用 SitePrism 和 Capybara,定义元素的标准方法使我可以访问由 Capybara 的 Element 类Capybara::Node::Element建模的选择,而且我似乎找不到提取底层 Selenium 元素的简单方法来自水豚元素。

我四处寻找替代方案,发现 Capybara 的#select方法,但这对我来说似乎非常有限,因为它看起来迫使您按值选择,并且用于定义页面上的选择的参数非常狭窄。

有没有一种简单的方法可以从 SitePrism/Capybara 创建 Selenium Select?还是有更好的方法来完全做到这一点?谢谢!

0 投票
1 回答
4668 浏览

ruby-on-rails - 如何正确配置 Rails 测试以在浏览器中运行它?( site_prism, cucumber, capybara, selenium webdriver )

我正在为 Rails 应用程序编写测试,我使用 site_prism、capybara、selenium 和 cucumber。如何设置 Selenium 驱动程序以在浏览器 (firefox) 中运行我的测试?

例如,它是功能之一:

这是我的 features/support/env.rb 配置文件:

我知道,使用 capybara 我可以在浏览器中运行这样的场景:

但!使用 site_prism,我只有 Page#load 方法。也许我需要将加载方法与水豚会话集成,但我该怎么做呢?

大多数情况下,我按照文档(github 上的 cypabara wiki)中的描述执行所有操作,但我的测试在没有浏览器的情况下运行。我不明白为什么。

请帮忙。谢谢。

0 投票
1 回答
652 浏览

selenium-webdriver - 如何处理技术上超出部分范围的元素和子部分?

我正在尝试对包含部分和子部分的页面进行建模,并且在范围界定方面遇到了麻烦。

我正在定义的部分可以在 DOM 中的层次结构中找到,如下所示:

html > body > div.page-background > div#wrapper > div#content > div#primary > ... > div#reserve-search

因此,我使用 CSS 选择器div#reserve-search定义了页面上的部分。但是,单击本节中的按钮会弹出一个需要与之交互的弹出面板。尽管弹出窗口在逻辑上是该部分的一部分,但它位于 DOM 的不同部分:

html > 正文 > div#overlay-address

这让我陷入了困境。当前代码看起来有点像这样:

上面的问题是,当我尝试调用时interactWithAddressSectionOverlayAddressSection由 的范围定义,因此它实际上在div#reserve-search div#overlay-addressReserveSearchSection下的 DOM 中查找子部分。由于子部分不在那里,调用超时并且找不到子部分。

我想在更大的部分中定义这个子部分,这绝对是它在逻辑上属于的地方和需要访问的地方。有没有办法在不使用父节范围的情况下定义子节的定位器?

显然,子部分存在于 DOM 中的父级中更方便和“正确”,但我见过很多这样定义的弹出窗口和面板,从技术上讲,它们位于页面的一个非常不同的部分,即使该结构绝对应该建模为 DOM 不同部分的子部分。似乎应该有一种方法让我摆脱父部分的范围,也许是通过使用某种绝对选择器定义子部分。这样的方法存在吗?如果没有,还有其他解决方法吗?

0 投票
1 回答
2203 浏览

capybara - 如何为可能具有子域的 SitePrism::Page 设置 URL?

我正在使用的基础设施最初按照Site Prism 文档建议的方式处理 URL:域是通过设置处理的Capybara.app_host,并且页面本身set_url使用相对路径调用。

事实证明,生产站点上的某些页面具有子域,例如members.mycompany.com而不是www.mycompany.com. 测试还需要能够完全在具有不同域的测试环境中运行,并且在测试环境中根本没有子域,即使对于那些在生产站点中确实具有子域的页面也是如此。因此,将完整的 URL 放入每个 URLSitePrism::Page不是一种选择。

我认为最好的选择是Capybara.app_host完全停止使用,并创建一个 URL 构建器,该构建器将使用环境状态(即:test:production)、页面的相对路径以及指示页面是否属于生产子域。就像是:

我曾希望我可以get_url在每个SitePrism::Page对象中使用来生成完整的 URL,而不需要Capybara.app_host,如下所示:

如果环境是:test,我希望LoginPage加载https://testmachine.localenvironment.com/loginMemberPage加载https://testmachine.localenvironment.com/mypage。如果环境是:production,我希望LoginPage加载https://www.mycompany.com/loginMemberPage加载https://members.mycompany.com/mypage

我相信我的方法中的代码做了我认为应该做的事情,而且我还相信我创建的 Environment 对象在测试中调用get_url页面方法之前将其状态设置为适当的环境。#load可悲的是,当我尝试加载我的SitePrism::Page对象时,获取的环境值get_url始终是 Environment 对象的默认值(即:test)。结果,即使我尝试针对生产执行,它最终也会加载测试环境 URL。

感觉就像在实例化对象之前评估set_url每个对象的一部分,我似乎无法找到一种方法来让我的环境初始化在它之前发生。我是 Ruby 的新手,所以我希望我只是误解了这些东西加载的顺序或层次结构,并且不难纠正。谁能确定我的尝试有什么问题,或者,如果有更好的方法来处理这种情况,请指出更好的方法是什么?SitePrism::PageSitePrism::Page

0 投票
2 回答
2312 浏览

capybara - Can't seem to use SitePrism's element.visible? if the element doesn't exist

I have the following codes:

The problem is if header_upgrade_subscription doesn't exist, it just fails with:

I know that in Capybara, you can do:

and it would return nil if it doesn't exist. How would I use "first" method against the SitePrism element? This is what I get:

I like using the "first" method as it has no wait time if the element doesn't exist.

Thanks for your help!

0 投票
2 回答
1045 浏览

ruby - How to get CSS Style of section in Siteprism Page object model using Cucumber/Capybara

How to get CSS Style of section in Siteprism Page object model using Cucumber/Capybara. For an element, I use the below code to get CSS

@app.page_name.element_name.css('height')

For sections, When I try to use same as above like

I am getting error as

undefined method `css' for #section_name_Section:0x3635b08> (NoMethodError)

Is there anyway to get css of section directly instead of creating one more element for the same section and using it?

or

Is there any way to convert section into element in step definitions?

0 投票
0 回答
261 浏览

cucumber - 第一个场景在 Cucumber 的场景大纲中每次都失败

每当我使用 HTML 报告作为输出文件运行我的功能文件时,场景大纲中的第一个场景每次都失败。但是,当我在功能文件中制作与第一个场景相同的场景大纲时,它就会通过,但这会使我的测试用例在功能文件中变得奇怪。

知道为什么会发生这种情况以及如何克服吗?

我的黄瓜版本是“1.3.15”

0 投票
1 回答
361 浏览

rubymine - 在 Rubymine 中编写完整的 Siteprism 元素

我正在使用 Selenium、Capybara 和 siteprism 进行自动化。使用 ruby​​mine,我想完成代码,以便我可以键入 @page。并获取方法列表(可行)以及使用 siteprism 在页面对象中定义的元素和部分的列表。

有没有办法在 Rubymine 中做到这一点?Sublime 文本编辑器可以做到这一点,但它不能很好地处理类名和方法。

0 投票
1 回答
843 浏览

rspec - 使用 SitePrism 的页面对象元素来执行页面断言

我想知道是否有办法page.should直接使用页面对象元素执行断言,而不是将 xpath 或 CSS 选择器字符串作为参数。

IE:

页面类:

步骤定义:

.get_css不存在,但它用于说明所需的内容。

0 投票
1 回答
287 浏览

ruby - 从 SitePrism 页面内部获取页面驱动程序

如何从 SitePrism 页面中获取页面驱动程序?

根据poltergeist 文档,我只需要调用:

但它指的是Capybara页面,而不是SitePrism的页面。因此问题是:当您使用 SitePrism 时如何获取 Capybara 页面?我无法在 SitePrism 中找到page/driver方法或类似的东西。

提前致谢。