标签: pageobjects

Selenium中页面对象模型的缺点

使用页面对象进行Selenium测试有什么缺点吗?

pageobjects selenium-webdriver

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

什么是正确的量角器页面对象的语法?

我为Protractor的Page Objects找到了不同类型的语法,我想知道,他们的背景是什么以及建议的方式.

这是Protractor教程中的官方PageObject语法.我最喜欢它,因为它清晰可​​读:

use strict;

var AngularHomepage = function() {
  var nameInput = element(by.model('yourName'));
  var greeting = element(by.binding('yourName'));

  this.get = function() {
    browser.get('http://www.angularjs.org');
  };

  this.setName = function(name) {
    nameInput.sendKeys(name);
  };

  this.getGreeting = function() {
    return greeting.getText();
  };
};
module.exports = AngularHomepage;
Run Code Online (Sandbox Code Playgroud)

但是,我也发现了这种情况:

'use strict';

var AngularPage = function () {
  browser.get('http://www.angularjs.org');
};

    AngularPage.prototype  = Object.create({}, {
      todoText:  {   get: function ()     { return element(by.model('todoText'));             }},
      addButton: {   get: function ()     { return element(by.css('[value="add"]'));          }},
      yourName:  {   get: function ()     { …
Run Code Online (Sandbox Code Playgroud)

pageobjects protractor

4
推荐指数
1
解决办法
1667
查看次数

带有量角器的页面对象模式

我正在尝试使用量角器创建页面对象文件.

我的应用程序具有以下布局. 在此输入图像描述 和页面对象文件..

navbar_po.js

var NavBar = function() {
    // define navbar elements and operations
    //  .
    //  .   
};
module.exports = NavBar;
Run Code Online (Sandbox Code Playgroud)

subNavbar_po.js

var SubNavBar = function() {
    // define subnavbar elements and operations
    //  .
    //  .   
};
module.exports = SubNavBar;
Run Code Online (Sandbox Code Playgroud)

page1_po.js

var Page1 = function() {

    this.navbar = function(){
        var navbar = require('./navbar_po.js');
        return new navbar();
    }
    this.subnavbar = function(){
        var subnavbar = require('./subNavbar_po.js');
        return new subnavbar();
    }

    // define Page1 particular elements and operations
    //  . …
Run Code Online (Sandbox Code Playgroud)

javascript selenium pageobjects selenium-webdriver protractor

4
推荐指数
1
解决办法
2053
查看次数

我们应该为带有选择下拉菜单的弹出窗口编写单独的页面对象吗?

我是使用 selenium 和 java 的页面对象模型自动化的新手。我正在使用页面对象模型,并将每个页面作为一个类,并将该页面中的操作作为方法。我们是否应该为提交表单时出现的简单弹出窗口编写单独的页面对象。此弹出窗口用于选择服务类型,接下来将根据选择打开正确的表单。我在弹出之前和之后的页面都有“页面对象”。但是对于这个,我只是插入了一个直接代码来选择一个选项,然后单击下一步按钮。我应该为此弹出窗口创建一个单独的页面对象类吗?(因为这不是一个页面)。弹出窗口有 3 个选项和一个下一步按钮以继续。

java selenium pageobjects

4
推荐指数
2
解决办法
1543
查看次数

如何在Selenium中使用页面工厂时明确等待?

我将在Selenium组织一次明确的等待,如下所示:

WebDriverWait = new WebDriverWait(driver,30);

WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(locator));
Run Code Online (Sandbox Code Playgroud)

问题是我的类中没有驱动程序,因为我使用了PageFactory,而不是测试类中的构造函数:

MyClass myform = PageFactory.InitElements(driver, MyClass.class)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,组织明确等待的好决定是什么?

java selenium webdriver pageobjects selenium-webdriver

4
推荐指数
1
解决办法
4204
查看次数

动态页面网址

我有一个带有动态 URL 的页面。我们称之为查看帖子页面。帖子 1 的网址是site.com/post/1帖子 2 的网址是site.com/post/2

这就是我现在所做的检查我是否在正确的页面上。

这一页:

class ViewPostPage
  include PageObject

  def self.url
    "site.com/post/"
  end
end
Run Code Online (Sandbox Code Playgroud)

黄瓜步骤:

on(ViewPostPage) do |page|
  @browser.url.should == "#{page.class.url}#{@id}"
end
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?你甚至费心检查整个 URL,还是只检查site.com/post/一部分?

我正在使用最新的页面对象gem (0.6.6)。

更新

更大的问题是直接转到具有动态 URL 的页面。

这一页:

class ViewPostPage
  include PageObject

  def self.url
    "site.com/post/"
  end
  page_url url
end
Run Code Online (Sandbox Code Playgroud)

黄瓜步骤:

visit ViewPostPage
Run Code Online (Sandbox Code Playgroud)

我现在要做的是将 Cucumber 步骤更改为:

@browser.goto "#{ViewPostPage.url}#{@id}"
Run Code Online (Sandbox Code Playgroud)

如果有一种方法可以让页面知道它的 ID,那就太好了,但我还没有想出如何去做。

ruby watir-webdriver pageobjects page-object-gem

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

错误:在量角器中无法找到模块

所以我是新的量角器并尝试使用页面对象进行测试,以使代码更易于管理.在这方面遇到一些问题.

下面是我的主要spec文件'example_spec.js'

describe('angularjs homepage', function() {

  var home_page = require('../home_page.js');

  it('should greet the named user', function() {
    home_page.enterFieldValue('Jack Sparrow');
    var getHomePageText = home_page.getDyanmaicText();
    expect(getHomePageText).toBe('Hello Steve!');
  });
});
Run Code Online (Sandbox Code Playgroud)

下一个文件是名为"home_page.js"的页面对象

var home_page = function(){

    //Send in a value.
    this.enterFieldValue = function(value){
        element(by.model('youName')).sendKeys(value);
    };

    this.getDyanmaicText = function(){
      return element(by.binding('yourName')).getText();

    };

};

module.exports = new home_page();
Run Code Online (Sandbox Code Playgroud)

问题是在运行此测试时我得到以下错误.即使为文件尝试不同的路径,我仍然会收到错误.任何帮助,将不胜感激.

Failures:
1) angularjs homepage encountered a declaration exception
  Message:
    Error: Cannot find module '../home_page.js'
  Stack:
    Error: Cannot find module '../home_page.js'
        at Function.Module._resolveFilename (module.js:455:15)
        at Function.Module._load (module.js:403:25)
        at …
Run Code Online (Sandbox Code Playgroud)

javascript testing requirejs pageobjects protractor

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

Java selenium 页面对象菜单

我正在使用页面对象模型。在我的网站上,大多数页面都有一个菜单,所以我想我应该创建一个 MenuPage 类,每个其他有菜单的页面都会扩展它。

但现在我想从菜单中重新组合我所有的 WebElement,以将它们与当前页面之一分开。

换句话说,如果一个元素直接在页面上,我会像这样访问它。

MyPage mypage = new MyPage(); /*MyPage extends MenuPage*/
mypage.myWebElement.click();
Run Code Online (Sandbox Code Playgroud)

但是如果 webelement 是菜单的一部分,而不是 MyPage 的一部分,我想从

MyPage mypage = new MyPage();  /*MyPage extends MenuPage*/
mypage.menu.myWebElement.click();
Run Code Online (Sandbox Code Playgroud)

我知道我可以创建一个类菜单并将其实例化到 MenuPage 中,但由于它只会在那里使用,我不希望它与类 MenuPage 分开。而且,菜单也有子菜单,所以我想用多级字段来表示它。并且为每个子菜单创建一个新类可以用这么少的时间制作很多类。

这样做的最佳方法是什么,或者您知道解决问题的其他方法吗?

java selenium pageobjects selenium-webdriver

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

Selenium/PageFactory:使用父元素的@FindBy 查找子元素?

我正在尝试将我的 selenium 测试转换为使用页面对象模型(以及扩展名 @FindBy)。我有几个这样的对象定义:

public WebElement objectParent() {
    return driver.findElement(By.name("parent-id")) ;
}

public WebElement objectChild() {
    WebElement elem = objectParent();
    return elem.findElement(By.name("child-id")) ;
}
Run Code Online (Sandbox Code Playgroud)

将父对象转换为 using@FindBy很容易:

@FindBy(name = "parent-id")
WebElement parentObj;
Run Code Online (Sandbox Code Playgroud)

基本上,如果可能的话,我想做这样的事情(我知道这不是真正的代码,这只是一个伪示例:

@FindBy(name = "parent-id")
WebElement parentObj;

@FindBy(parentObj.name = "child-id")
WebElement childObj;
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法过定位的子元素使用的父元素@FindBy?。我需要这样做,因为我的目标是页面上的特定元素,这些元素可能与页面上的其他元素共享相同的名称或类名。谢谢!

java pageobjects selenium-webdriver

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

Appium POM java.lang.NoSuchMethodException: jdk.proxy2.$Proxy15.proxyClassLookup()

在我的新 Mac 上设置 Appium。执行测试时我看到以下错误,

java.lang.RuntimeException:java.lang.NoSuchMethodException:jdk.proxy2.$Proxy15.proxyClassLookup()在io.appium.java_client.pagefactory.bys.builder.AppiumByBuilder.prepareAnnotationMethods(AppiumByBuilder.java:85)在io.appium。 java_client.pagefactory.bys.builder.AppiumByBuilder.getFilledValue(AppiumByBuilder.java:92) 在io.appium.java_client.pagefactory.bys.builder.AppiumByBuilder.createBy(AppiumByBuilder.java:148) 在io.appium.java_client.pagefactory。 DefaultElementByBuilder.getBys(DefaultElementByBuilder.java:133) 在 io.appium.java_client.pagefactory.DefaultElementByBuilder.buildMobileNativeBy(DefaultElementByBuilder.java:182) 在 io.appium.java_client.pagefactory.DefaultElementByBuilder.buildBy(DefaultElementByBuilder.java:216) 在 io .appium.java_client.pagefactory.AppiumElementLocatorFactory.createLocator(AppiumElementLocatorFactory.java:66)在io.appium.java_client.pagefactory.AppiumElementLocatorFactory.createLocator(AppiumElementLocatorFactory.java:53)在io.appium.java_client.pagefactory.AppiumElementLocatorFactory.createLocator(AppiumElementLocator)工厂.java:1) 在 org.openqa.selenium.support.pagefactory.DefaultFieldDecorator.decorate(DefaultFieldDecorator.java:56) 在 io.appium.java_client.pagefactory.AppiumFieldDecorator.decorate(AppiumFieldDecorator.java:155) 在 org.openqa. selenium.support.PageFactory.proxyFields(PageFactory.java:113) 在 org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:105)

JAVA 版本:java 版本“15.0.2”2021-01-19 Java(TM) SE 运行时环境(内部版本 15.0.2+7-27)

Appium 桌面版本:1.20.2

<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>7.0.0</version>
Run Code Online (Sandbox Code Playgroud)

java pageobjects appium

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