标签: pageobjects

在Cucumber上为多个功能使用相同的浏览器实例时出错

我在为Cucumber驱动程序创建浏览器实例时遇到问题.如果我在"之前做"的env.rb中创建对象:

Before do
@browser = Watir::Browser.new 'firefox'
end
Run Code Online (Sandbox Code Playgroud)

...工作正常,为每个功能打开一个新的浏览器,并在"After do"上关闭它.

这会降低执行速度,因为新浏览器会启动并关闭每个功能.但是如果我在"之前做"中创建@browser以便为所有功能使用相同的浏览器会话,则会出现以下错误:

**Unable to pick a platform for the provided browser (RuntimeError)**
Run Code Online (Sandbox Code Playgroud)

......根本没有进行任何测试.我正在使用页面对象gem,ruby-on-rails ......

你能告诉我,我做错了什么?非常感谢!

ruby-on-rails cucumber watir-webdriver pageobjects page-object-gem

3
推荐指数
1
解决办法
2022
查看次数

如何获取page_object元素的html源代码?

想象一下,我有一个div(用Watir语言):

@browser.div(:id, 'home_slideshow')
Run Code Online (Sandbox Code Playgroud)

我需要里面的html代码来做一些"魔法正则表达式":).获取div html代码的方法可能是:

the_div_html = @browser.div(:id, 'home_slideshow').html
Run Code Online (Sandbox Code Playgroud)

好.我正在使用page_object gem并假设我将div作为元素,例如:

div(:slide_show, :id => 'home_slideshow')
Run Code Online (Sandbox Code Playgroud)

要获得html里面我可以使用:

the_div_html = slide_show_element.html
Run Code Online (Sandbox Code Playgroud)

......但是我得到了弃权警告:

*** DEPRECATION WARNING
*** You are calling a method named attribute_value at home_page.rb:80:in `get_slide_code'.
*** This method does not exist in page-object so it is being passed to the driver.
*** This feature will be removed in the near future.
Run Code Online (Sandbox Code Playgroud)

如何使用page_object元素获取html代码?正如我之前提出的一些类似的问题,确定答案是如此简单,但我看看Cheezy书,整个stackoverflow和页面对象rubydoc信息,我没有找到它.你能告诉我路吗?

先感谢您!

ruby cucumber watir-webdriver pageobjects page-object-gem

3
推荐指数
1
解决办法
776
查看次数

使用[FindsBy]属性时,将IWebElements作为C#/ Selenium中的集合保存

我正在尝试使用OpenQA.Selenium.Support.PageObjects中包含的[FindsBy]属性将多个IWebElement设置为一个集合,如下所示。假设我想将所有“ li”元素保留在实例变量“ MyElements”中。

的HTML

<ul class="elements">
  <li>e1</li>
  <li>e2</li>
  <li>e3</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

C#

class TopPage {

  [FindsBy(How = How.CssSelector, Using = "ul.elements li")]
  public IWebElement[] MyElements;

}
Run Code Online (Sandbox Code Playgroud)

我该如何进行这项工作?

c# selenium webdriver pageobjects selenium-webdriver

3
推荐指数
1
解决办法
5308
查看次数

用于PageObject模式的Selenium WebDriver Recorder

我知道有Selenium IDE和Selenium Builder作为Firefox插件来记录动作并将它们导出为例如C#-Code.

但是还有一个工具可以帮助您按照PageObject模式创建Selenium(2)WebDriver测试代码吗?我知道这很难,因为程序必须知道如何实现抽象.

据我所知,这样的工具不存在?但是,由工具支持创建Selenium WebDriver PageObject-Code的最佳方法是什么?

也许使用Selenium构建器只是通过id,类名等创建引用并在我的代码中手动实现它们?这可能比我自己决定精确识别元素的速度要快一些.但是为什么Selenium Builder的开发人员动态地创建元素引用

IWebDriver wd = new RemoteWebDriver(DesiredCapabilities.Firefox());
wd.FindElement(By.Id("NameField")).Click();
wd.FindElement(By.Id("NameField")).Clear();
Run Code Online (Sandbox Code Playgroud)

而不是FindBy属性?

[FindsBy(Using = "NameField")]
public IWebElement nameField;
Run Code Online (Sandbox Code Playgroud)

元素将是可重用的,代码将更短.

c# selenium-ide pageobjects selenium-webdriver

3
推荐指数
1
解决办法
2596
查看次数

调用构造函数时的NPE

我有以下java类(实现页面对象模式)

package core.pageObjects;

import org.openqa.selenium.*;

public class ConsultaClientePorDocumento {

    private WebDriver driver;

    public ConsultaClientePorDocumento(WebDriver d){
        this.driver = d;
    }

    public WebElement cancelarButton = driver.findElement(By.id("Cancelar"));
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试在我的测试中使用它,如下所示:

import core.pageObjects.*;

ConsultaClientePorDocumento consultaCPD = new ConsultaClientePorDocumento(driver);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

java.lang.NullPointerException
at core.pageObjects.ConsultaClientePorDocumento.<init>(ConsultaClientePorDocumento.java:16)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

java selenium pageobjects

3
推荐指数
1
解决办法
177
查看次数

存储定位器的最佳方式

我正在关注Selenium自动化的页面对象设计模式,我可以猜测很多人将定位器存储在.properties文件中并通过代码访问它们.将定位器放在不同的位置似乎很棒.

既然,我还没有参与任何关于Selenium自动化的大项目,我想知道关于跟随的想法,以便我可以避免将来可能出现的问题:

  1. 在大型项目中存储属性文件中的定位器是否有用(测试用​​例超过1000个左右)?

    a)如果对大型项目没有帮助,那么使我们不在属性文件中存储定位器的困难是什么?

    b)如果它有用,如果采取了哪些预防措施可以使工作更轻松?

  2. 与属性文件相比,在页面类中存储定位器本身是最好的方法吗?

java selenium pageobjects selenium-webdriver

3
推荐指数
2
解决办法
3415
查看次数

量角器页面对象问题

我似乎陷入了页面对象的构造.我阅读了很多关于页面对象的文档,并且知道它们包含两件事:

  • 页面上显示的元素
  • 与页面交互的功能

当我检查示例文件时,我看到元素是在每个页面对象的开头定义的.在测试中,pageobject通过require导入.但我看到的问题是,当需求发生时,对象尚未存在.有没有其他方法来解决这个问题,而不必在页面加载时执行需求?

提前致谢.问候

javascript pageobjects protractor

3
推荐指数
1
解决办法
148
查看次数

如何确定Selenium中是否存在WebElement?

我知道我可以用 (driver.findElements(By.xpath("Xpath Value")).size() != 0);

但是,我使用的是页面对象模型,其全部目的是在单独的类中预定义WebElement,因此不必在测试类中使用“ FindElements By”。

这是我目前拥有的

if (objPage.webElement.isEnabled()){
   System.out.println("found element");
}else{
   System.out.println("element not found");
}
Run Code Online (Sandbox Code Playgroud)

但是,这试图识别可能不存在的WebElement。当它不存在时,我得到:

没有此类元素”例外。

java selenium pageobjects selenium-webdriver

3
推荐指数
1
解决办法
6617
查看次数

Site Prism,Capybara:带变量的选择器

我正在使用site_prism来实现水豚中的页面对象模型。看起来很有趣。

我如何指定一个选择器,例如“[data-id='x']”,其中x是整数?像这样的东西:

class Home < SitePrism::Page
  set_url "http://www.example.com"
  element :row, "[data-id='@id']"
end
Run Code Online (Sandbox Code Playgroud)

然后在我的测试中:

Then /^the home page should contain a row$/ do
  @home.should have_row 1234
end
Run Code Online (Sandbox Code Playgroud)

ruby capybara ruby-on-rails-3 pageobjects site-prism

2
推荐指数
1
解决办法
4247
查看次数

Cypress.io - 如何等待返回调用属性的方法的结果?

我有一个方法可以获取元素的 href 属性hrefAppTheme并检查它是否是 string-array 的值之一appThemes

describe('...',() => {
    it('should ...', () => {
      (...)
      let defaultAppTheme = '';
      onMenuPage.hrefAppTheme.invoke('attr', 'href')
        .then(hrefVal => {
          if (typeof hrefVal !== 'undefined') {
            expect(hrefVal).to.be.oneOf(onMenuPage.appThemes);
            defaultAppTheme = hrefVal;

      //referencing the variable 'defaultAppTheme' further below...
    }
  });
Run Code Online (Sandbox Code Playgroud)

可以安全地假设this.hrefAppTheme.invoke('attr', 'href')总是返回用户主题之一(字符串),因为上面的代码工作可靠。

由于事实证明我需要在几个不同的地方使用该逻辑,因此我想将其提取到一个方法中并将其放入页面对象类中。这就是我所拥有的:

export default class MenuPage {
  (...)
  getUserTheme(): string {
    let userTheme = '';
    cy.then(() => {
      this.hrefAppTheme.invoke('attr', 'href')
        .then(resVal => {
          if (typeof resVal !== 'undefined') {
            userTheme = resVal; …
Run Code Online (Sandbox Code Playgroud)

invoke node.js pageobjects typescript cypress

2
推荐指数
1
解决办法
86
查看次数