首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构造许多相似的PageObjects?

如何构造许多相似的PageObjects?
EN

Stack Exchange QA用户
提问于 2017-04-28 12:58:53
回答 2查看 67关注 0票数 3

我们有一个以某种web应用程序为中心的业务,其步骤类似于向导:

  1. 有信息的登陆页面
  2. 用户可以输入个人信息的页面(姓名、电子邮件、电话、地址、.)
  3. 页面中,用户可以输入他们感兴趣的项目的信息。这个页面可以包含相当多的字段来输入信息。
  4. 带有确认按钮的摘要页
  5. 确认订阅后的页面谢谢

页面本身并不难,问题在于我们为不同国家的几个业务部门提供了这样的流程。

因此,第2页的输入字段各不相同:美国地址不同于英国地址,等等。

第3页变化最大,因为我们销售不同类型的订阅,需要不同的信息。

所以我们有product1_US,也有product1_UK,还有: product2_US,product2_UK等等。

在应用程序的代码中有一些共享代码,也有每个产品的组合,国家有特定的代码。

由于企业希望在更多的国家推出越来越多的产品,我不认为为每一个组合(产品、国家)制作PageObjects是可行的。

如何最好地构造我的代码呢?

我应该为每一个组合(产品、国家)做一个几乎空白的骨架PageObject吗?我是否应该为每个组合建模页面的各个部分,并将这些部分组合到骨架类中?

由于应用程序是用C#编写的,我们很可能也会在NUnit中使用C#。

EN

回答 2

Stack Exchange QA用户

发布于 2017-04-28 15:20:41

您可以制作一个基础POM,由您的国家特定POMs继承:

代码语言:javascript
复制
public class BaseProductPOM
{
    // all common selectors and methods
}

在另一个.cs文件中:

代码语言:javascript
复制
public class UsProductPOM : BaseProductPOM
{
    public UsProductPom(IWebDriver driver)
    {
        PageFactory.InitElements(driver, this);
    }

    // country specific selectors and methods
}
票数 2
EN

Stack Exchange QA用户

发布于 2017-04-28 14:09:41

最近,我发布了一个测试自动化框架,允许在不编写自定义页面对象的情况下运行测试。听起来您可以从我在动态创建页面对象时采取的类似方法中获益。

(编辑:当然,当您在寻找C#帮助时,这段代码是用Java编写的,但是从Java到C#的转换应该很容易。)

我的代码在这里:https://github.com/saiscode/kheera/blob/master/src/main/java/in/ramachandr/automation/core/extras/

具体来说,请看-map方法,它将web元素附加到命名字符串。

代码语言:javascript
复制
protected void map(AbstractPage p) {
    getBys();
    List<WebElement> elements = new ArrayList<WebElement>();
    for (By by : bys) {
        elements.addAll(driver.findElements(by));
    }
    PageFactory.initElements(driver, this);
    String[] tokens = locators.split(",");
    for(WebElement w: elements) {
        for (String s : tokens) {
            try{
                String attr = w.getAttribute(s);//throws StaleElementReferenceException
                if (attr != null) {
                    nameElementMap.put(attr, w);
                }
            }catch(StaleElementReferenceException se){
                //ignoring elements which have become stale because
                //a stale object shouldn't have to be referenced 
                //by an automation script
            }
        }
    }
}

框架

票数 0
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/26991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档