我们有一个以某种web应用程序为中心的业务,其步骤类似于向导:
页面本身并不难,问题在于我们为不同国家的几个业务部门提供了这样的流程。
因此,第2页的输入字段各不相同:美国地址不同于英国地址,等等。
第3页变化最大,因为我们销售不同类型的订阅,需要不同的信息。
所以我们有product1_US,也有product1_UK,还有: product2_US,product2_UK等等。
在应用程序的代码中有一些共享代码,也有每个产品的组合,国家有特定的代码。
由于企业希望在更多的国家推出越来越多的产品,我不认为为每一个组合(产品、国家)制作PageObjects是可行的。
如何最好地构造我的代码呢?
我应该为每一个组合(产品、国家)做一个几乎空白的骨架PageObject吗?我是否应该为每个组合建模页面的各个部分,并将这些部分组合到骨架类中?
由于应用程序是用C#编写的,我们很可能也会在NUnit中使用C#。
发布于 2017-04-28 15:20:41
您可以制作一个基础POM,由您的国家特定POMs继承:
public class BaseProductPOM
{
// all common selectors and methods
}在另一个.cs文件中:
public class UsProductPOM : BaseProductPOM
{
public UsProductPom(IWebDriver driver)
{
PageFactory.InitElements(driver, this);
}
// country specific selectors and methods
}发布于 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元素附加到命名字符串。
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
}
}
}
}框架
https://sqa.stackexchange.com/questions/26991
复制相似问题