2017-08-23 28 views
0

J'ai 2 classes on étend l'autre, ils sont énumérés ci-dessous:Pouvez-vous remplacer le contenu du bloc "contenu statique" lors de l'extension des classes dans geb?

class TabledPage extends Page { 

    static content ={ 
     table {$(By.xpath("//tbody"))} 
     headers {$(By.xpath("//thead"))} 
    } 

    Navigator gatAllRows(){ 
     return table.children() 
    } 

    Navigator getRow(int index){ 
     return table.children()[index] 
    } 

    Navigator getRow(String name){ 
     return table.children().find{it.text()==name} 
    } 

    Navigator getColumn(Navigator row, int column){ 
     return row.children()[column] 
    } 


} 

et cette classe qui étend la classe ci-dessus:

class somePage extends TabledPage{ 
    static content ={ 
     table(required: false){$(By.xpath("//table[contains(@class,'w-100 table-striped wi-table-hover')]//tbody"))} // I want this to overwrite the table def in TabledPage 
    } 
} 

donc dans l'application que je teste la plupart des pages seulement avoir 1 table, mais dans certains cas il y a 2 tables (une est cachée selon la taille de l'écran) donc je veux pouvoir remplacer la définition de la table dans ce cas pour pointer vers une table spécifique, puis-je le faire sans outrepasser Les méthodes getRow ou celles-ci doivent-elles aussi être remplacées?

Juste pour donner un exemple de la façon dont j'appelle cette alswell:

at SomePage 
getRow(0) 

cela fonctionne, mais il utilise la définition de TabledPage de la table Navigator au lieu de la définition de somepage et je me demande s'il y a un moyen pour moi de le faire utiliser l'autre définition

+0

J'ai fini par redéfinir la définition de table dans TabledModule pour travailler avec toutes les différentes pages, mais je suis toujours curieux de savoir si ce que je suggère est possible – switch201

+0

Qu'est-ce qui vous fait croire _ qu'il utilise la définition TabledPage de la table Navigator au lieu de la définition somePage_? Je crois que le dépassement de contenu fonctionne comme prévu. Donc, je me demande si ce que vous avez observé n'était pas dû à la définition de 'TabledPage' utilisée, mais à cause de quelque chose de complètement différent. – erdi

+0

@erdi Je vais essayer de re-tester quand j'ai une chance et vous faire savoir ce que je trouve – switch201

Répondre

0

Cela fonctionnerait-il si vous changiez le contenu de la spécification au lieu de la page? Voici comment j'utilise des sélecteurs dynamiques dans une page:

static content= 
{ 
    quantityField{$("$quantitySelector") 
} 

void setSelectors(tableIndex, row) 
{ 
    quantitySelector="#offerDtos$tableIndex\\.segments$row\\.quantity" 
} 

Dans mon spec, je l'appelle juste setSelectors avec les valeurs appropriées.