2015-07-17 2 views
2

Я проверяю иерархию папок на веб-странице, в зависимости от типа пользователя. User1 имеет набор разрешений, которые позволяют ему видеть структуру папок, как это:Проверка иерархии папок с использованием selenium webdriver

Main Folder 
    - First Child 
     -First Grandchild 
     -Second Grandchild 
    - Second Child 
    - Third Child 

Html код:

<div id = 0> 
    <div id = 1> 
    <table id = 1> 
    <tbody> 
    <td id="content1" 
    <a id="label1" 
    <span id="treeView_treeNode1_name" 
     Main Folder 
    </span></a></td></tbody></table> 

      <div id = 2> 
      <table id = 2> 
      <tbody> 
      <td id="content2" 
      <a id="label2" 
      <span id="treeView_treeNode2_name" 
       First Child 
      </span></a></td></tbody></table> 

        <div id = 5> 
        <table id = 5> 
        <tbody> 
        <td id="content5" 
        <a id="label5" 
        <span id="treeView_treeNode5_name" 
         First GrandChild 
        </span></a></td></tbody></table> 
        </div> 

        <div id = 6> 
        <table id = 6> 
        <tbody> 
        <td id="content6" 
        <a id="label6" 
        <span id="treeView_treeNode6_name" 
         Second GrandChild 
        </span></a></td></tbody></table> 
        </div> 
      </div> 


      <div id = 3> 
      <table id = 3> 
      <tbody> 
      <td id="content3" 
      <a id="label3" 
      <span id="treeView_treeNode3_name" 
       Second Child 
      </span></a></td></tbody></table> 
      </div> 


      <div id = 4> 
      <table id = 4> 
      <tbody> 
      <td id="content4" 
      <a id="label4" 
      <span id="treeView_treeNode4_name" 
       Third Child 
      </span></a></td></tbody></table> 
      </div> 

    </div> /*End of division 1 */ 
</div> /* End of division 0 */ 

Пользователь2 имеет другой набор разрешений, которые позволяют ему видеть структуру папок как это:

Main Folder 
    - First Child 
     -First Grandchild 
     -Second Grandchild 

Html код:

<div id = 0> 
    <div id = 1> 
    <table id = 1> 
    <tbody> 
    <td id="content1" 
    <a id="label1" 
    <span id="treeView_treeNode1_name" 
     Main Folder 
    </span></a></td></tbody></table> 

      <div id = 2> 
      <table id = 2> 
      <tbody> 
      <td id="content2" 
      <a id="label2" 
      <span id="treeView_treeNode2_name" 
       First Child 
      </span></a></td></tbody></table> 

        <div id = 3> 
        <table id = 3> 
        <tbody> 
        <td id="content3" 
        <a id="label3" 
        <span id="treeView_treeNode3_name" 
         First GrandChild 
        </span></a></td></tbody></table> 
        </div> 

        <div id = 4> 
        <table id = 4> 
        <tbody> 
        <td id="content4" 
        <a id="label4" 
        <span id="treeView_treeNode4_name" 
         Second GrandChild 
        </span></a></td></tbody></table> 
        </div> 
      </div> 
    </div> /*End of division 1 */ 
</div> /*End of division 1 */ 

Я использую тесты Java Cucumber для запуска сценариев.

Given I am user'User1' 
When I log in 
Then I should see "Main Folder" 
And I should see "First Child" 
And I should see "First Grandchild" 
And I should see "Second Grandchild" 
And I should see "Second Child" 
And I should see "Third Child" 


Given I am user 'User2' 
When I log in 
Then I should see "Main Folder" 
And I should see "First Child" 
And I should see "First Grandchild" 
And I should see "Second Grandchild" 
And I should NOT see "Second Child" 
And I should NOT see "Third Child" 

1) Многие из шагов будут перекрываться, но я не могу использовать один и тот же код, как селен XPath детей изменяется по мере изменения пользователя. Я мог бы использовать оператор if if, чтобы использовать xpath на основе пользователя, но задавался вопросом, есть ли другой способ сделать это?

2) Как я могу проверить, нет ли в папке папки? Я мог проверить текст на своем ресурсе и утверждать, что его нет, но задавался вопросом, есть ли лучший способ.

Заранее спасибо.

ответ

0

Таким образом, вы можете создать оболочку для обработки этой структуры, я написал что-то из верхней части моей головы, не проверял:

public class FolderHelper { 

    final WebElement folder; 

    public FolderHelper(WebElement element) { 
     folder = element; 
     isLoaded() 
    } 

    public void isLoaded() { 
     new WebDriverWait(getDriverFromSomePlace(), 30) 
       .ignoring(NoSuchElementException.class) 
       .ignoring(StaleElementReferenceException.class) 
       .until(ExpectedConditions.visibilityOf(folder)); 
    } 

    public List<WebElement> getDecendants(){ 
     return getDecendants(folder); 
    } 

    public List<WebElement> getDecendants(WebElement element){ 
     // afaik "/div" should return only first level, if not then look into appropriate xpath 
     return element.findElements(By.xpath("/div")); 
    } 

    public String getElementText(WebElement element) { 
     return element.findElement(By.tagName("span")).getText(); 
    } 
} 

И тогда вы можете использовать его из кода, используя что-то вроде:

public void yourMethod(){ 
    // get your main element: 
    WebElement main = driver.findElement(By.id("1")) 
    FolderHelper helper; 
    try{ 
     helper = new FolderHelper(main); 
    }catch(TimeOutException e){ // or whatever you want to use to determine if main element exists: 
     // all hope abandon, main was not found, you probably want to stop here 
    } 

    // get first level decendants: 
    List<WebElement> firstLevelDecendants = helper.getDecendants(); 
    // assert here, a la: 
    Assert.AreEqual(firstLevelDecendants.size(), 3) 

    // do with children your assertions: 
    for(WebElement e : firstLevelDecendants){ 
     if(helper.getElementText(e).equals("First Child ")){ 
      // ok, this one should have decendants: 
      List<WebElement> grandChildren = helper.getDecendants(e); 
      Assert.AreEqual(grandChildren.size(), 2) 
     } 
    } 
} 

Я действительно не смог протестировать его, чтобы он не работал как есть, но это просто для того, чтобы дать вам представление о том, как я его разрешу.

+0

Спасибо. Попробуй это. – sanaku