2015-07-29 2 views
1

Я пытаюсь найти способ найти EXT JS 5 Gridpanel с использованием Selenium. Я могу использовать Xpath, чтобы добраться до gridpanel, но это не идеально. Это потому, что у меня есть 2 сетки на одном уровне, поэтому Xpath для обоих, похоже, получается одинаковым. В Selenium У меня есть настройки PageObjects для моего приложения здесь, как я нахожу сетки в настоящее время:Selenium и ExtJS 5 Выбор сетки

public static WebElement sourceGrid(WebDriver driver){ 
    element = driver.findElement(By.xpath("//div[2]/div/div/div/div[3]/div/div[2]/table/tbody/tr/td/div")); 
    return element; 
} 

У меня есть атрибут ЦБС на сетке, но она никогда не сможет его найти. Вот что DOM выглядит следующим образом:

<div id="t_precautionsSourceGrid-body" data-ref="body" class="x-panel-body x-grid-with-row-lines x-grid-body x-panel-body-default x-panel-body-default x-noborder-rbl" role="presentation" style="width: 506px; left: 0px; top: 48px; height: 734px;"> 
    <div class="x-grid-view x-grid-with-row-lines x-fit-item x-grid-view-default x-unselectable" id="tableview-1168" tabindex="0" componentid="tableview-1168" style="overflow: auto; margin: 0px; width: 506px; height: 733px;"> 
     <div role="presentation" style="width: 1px; height: 1px; margin-top: -1px; position: absolute; left: 0px; display: none;" id="ext-element-11"></div> 
     <div class="x-grid-item-container" style="width: 506px; transform: translate3d(0px, 0px, 0px);"> 
     <table id="tableview-1168-record-439" data-boundview="tableview-1168" data-recordid="439" data-recordindex="0" class="x-grid-item x-grid-item-selected" cellpadding="0" cellspacing="0" style=";width:0"> 
      <tbody> 
       <tr class=" x-grid-row"> 
        <td class="x-grid-cell x-grid-td x-grid-cell-gridcolumn-1166 x-grid-cell-first x-unselectable" style="width:476px;" tabindex="-1" data-columnid="gridcolumn-1166"> 
        <div unselectable="on" class="x-grid-cell-inner " style="text-align:left;">C.Diff (Clostridium Difficile)</div> 
        </td> 
        <td class="x-grid-cell x-grid-td x-grid-cell-actioncolumn-1167 x-action-col-cell x-grid-cell-last x-unselectable" style="width:30px;" tabindex="-1" data-columnid="actioncolumn-1167"> 
        <div unselectable="on" class="x-grid-cell-inner x-grid-cell-inner-action-col" style="text-align:left;"><img role="button" alt="" src="Images/add.png" class="x-action-col-icon x-action-col-0 " data-qtip="Add"></div> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
     <table id="tableview-1168-record-440" data-boundview="tableview-1168" data-recordid="440" data-recordindex="1" class="x-grid-item" cellpadding="0" cellspacing="0" style=";width:0"> 
      <tbody> 
       <tr class=" x-grid-row"> 
        <td class="x-grid-cell x-grid-td x-grid-cell-gridcolumn-1166 x-grid-cell-first x-unselectable" style="width:476px;" tabindex="-1" data-columnid="gridcolumn-1166"> 
        <div unselectable="on" class="x-grid-cell-inner " style="text-align:left;">Combative</div> 
        </td> 
        <td class="x-grid-cell x-grid-td x-grid-cell-actioncolumn-1167 x-action-col-cell x-grid-cell-last x-unselectable" style="width:30px;" tabindex="-1" data-columnid="actioncolumn-1167"> 
        <div unselectable="on" class="x-grid-cell-inner x-grid-cell-inner-action-col" style="text-align:left;"><img role="button" alt="" src="Images/add.png" class="x-action-col-icon x-action-col-0 " data-qtip="Add"></div> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
     <table id="tableview-1168-record-441" data-boundview="tableview-1168" data-recordid="441" data-recordindex="2" class="x-grid-item" cellpadding="0" cellspacing="0" style=";width:0"> 
      <tbody> 
       <tr class=" x-grid-row"> 
        <td class="x-grid-cell x-grid-td x-grid-cell-gridcolumn-1166 x-grid-cell-first x-unselectable" style="width:476px;" tabindex="-1" data-columnid="gridcolumn-1166"> 
        <div unselectable="on" class="x-grid-cell-inner " style="text-align:left;">Falls Alert</div> 
        </td> 
        <td class="x-grid-cell x-grid-td x-grid-cell-actioncolumn-1167 x-action-col-cell x-grid-cell-last x-unselectable" style="width:30px;" tabindex="-1" data-columnid="actioncolumn-1167"> 
        <div unselectable="on" class="x-grid-cell-inner x-grid-cell-inner-action-col" style="text-align:left;"><img role="button" alt="" src="Images/add.png" class="x-action-col-icon x-action-col-0 " data-qtip="Add"></div> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
     <table id="tableview-1168-record-442" data-boundview="tableview-1168" data-recordid="442" data-recordindex="3" class="x-grid-item" cellpadding="0" cellspacing="0" style=";width:0"> 
      <tbody> 
       <tr class=" x-grid-row"> 
        <td class="x-grid-cell x-grid-td x-grid-cell-gridcolumn-1166 x-grid-cell-first x-unselectable" style="width:476px;" tabindex="-1" data-columnid="gridcolumn-1166"> 
        <div unselectable="on" class="x-grid-cell-inner " style="text-align:left;">MRSA (Methicillin Resistant Staphylococcus Aureus)</div> 
        </td> 
        <td class="x-grid-cell x-grid-td x-grid-cell-actioncolumn-1167 x-action-col-cell x-grid-cell-last x-unselectable" style="width:30px;" tabindex="-1" data-columnid="actioncolumn-1167"> 
        <div unselectable="on" class="x-grid-cell-inner x-grid-cell-inner-action-col" style="text-align:left;"><img role="button" alt="" src="Images/add.png" class="x-action-col-icon x-action-col-0 " data-qtip="Add"></div> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
     <table id="tableview-1168-record-443" data-boundview="tableview-1168" data-recordid="443" data-recordindex="4" class="x-grid-item" cellpadding="0" cellspacing="0" style=";width:0"> 
      <tbody> 
       <tr class=" x-grid-row"> 
        <td class="x-grid-cell x-grid-td x-grid-cell-gridcolumn-1166 x-grid-cell-first x-unselectable" style="width:476px;" tabindex="-1" data-columnid="gridcolumn-1166"> 
        <div unselectable="on" class="x-grid-cell-inner " style="text-align:left;">Respiratory</div> 
        </td> 
        <td class="x-grid-cell x-grid-td x-grid-cell-actioncolumn-1167 x-action-col-cell x-grid-cell-last x-unselectable" style="width:30px;" tabindex="-1" data-columnid="actioncolumn-1167"> 
        <div unselectable="on" class="x-grid-cell-inner x-grid-cell-inner-action-col" style="text-align:left;"><img role="button" alt="" src="Images/add.png" class="x-action-col-icon x-action-col-0 " data-qtip="Add"></div> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
     <table id="tableview-1168-record-444" data-boundview="tableview-1168" data-recordid="444" data-recordindex="5" class="x-grid-item" cellpadding="0" cellspacing="0" style=";width:0"> 
      <tbody> 
       <tr class=" x-grid-row"> 
        <td class="x-grid-cell x-grid-td x-grid-cell-gridcolumn-1166 x-grid-cell-first x-unselectable" style="width:476px;" tabindex="-1" data-columnid="gridcolumn-1166"> 
        <div unselectable="on" class="x-grid-cell-inner " style="text-align:left;">Reverse Isolation</div> 
        </td> 
        <td class="x-grid-cell x-grid-td x-grid-cell-actioncolumn-1167 x-action-col-cell x-grid-cell-last x-unselectable" style="width:30px;" tabindex="-1" data-columnid="actioncolumn-1167"> 
        <div unselectable="on" class="x-grid-cell-inner x-grid-cell-inner-action-col" style="text-align:left;"><img role="button" alt="" src="Images/add.png" class="x-action-col-icon x-action-col-0 " data-qtip="Add"></div> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
     <table id="tableview-1168-record-445" data-boundview="tableview-1168" data-recordid="445" data-recordindex="6" class="x-grid-item" cellpadding="0" cellspacing="0" style=";width:0"> 
      <tbody> 
       <tr class=" x-grid-row"> 
        <td class="x-grid-cell x-grid-td x-grid-cell-gridcolumn-1166 x-grid-cell-first x-unselectable" style="width:476px;" tabindex="-1" data-columnid="gridcolumn-1166"> 
        <div unselectable="on" class="x-grid-cell-inner " style="text-align:left;">VRE (Vancomycin Resistant Enterococci)</div> 
        </td> 
        <td class="x-grid-cell x-grid-td x-grid-cell-actioncolumn-1167 x-action-col-cell x-grid-cell-last x-unselectable" style="width:30px;" tabindex="-1" data-columnid="actioncolumn-1167"> 
        <div unselectable="on" class="x-grid-cell-inner x-grid-cell-inner-action-col" style="text-align:left;"><img role="button" alt="" src="Images/add.png" class="x-action-col-icon x-action-col-0 " data-qtip="Add"></div> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
     </div> 
    </div> 
</div> 

Я знаю, что это почти невозможно, чтобы посмотреть, какие-либо предложения, как сделать его лучше отформатирован здесь?

Итак, по существу, я хочу, чтобы тест попал в сетку, нажмите на первый элемент, а затем убедитесь, что он находится во второй сетке. При этом предполагается, что для начала используется свежая сетка источника и выбранная сетка.

Я пробовал много разных подходов. Добавление статического элемента id в столбцы сетки с помощью Jsoup, пытающегося создать обертки для компонентов EXT. Я еще не понял, как получить библиотеку Sencha для работы в Eclipse (Luna), если бы я мог работать, тогда я мог бы получить доступ к таким вещам, как Ext.ComponentQuery и т. Д.

Угадайте, что было два вопроса.

+0

использовать класс .x-grid-view up div – Raghavendra

+0

использовать это // div [содержит (@class, '.x-grid-view up')]/parent – Raghavendra

+0

Благодарим за редактирование Saifur. – tesposito

ответ

2

Как ExtJS создает таблицу для каждой строки, вы можете пойти со следующим XPath

//div[@class='x-grid-item-container']//table[1]//td[1]/div 

где //div[@class='x-grid-item-container'] найдет сетку и table является строкой здесь я хотел бы получить первую строку, так что я имею пошли с 1 как индекс и после td являются столбцами в row.I хотела пойти с 1st колонками так, я использую td[1]/div

так выше XPath будет найти первую строку первый столбец из первой видимой сетки

+0

Спасибо, Мадхан. Это работало для меня. У меня есть еще один вопрос. Используя эту идею, я пытаюсь использовать атрибут cls в сетке в качестве отправной точки. Мне пока не повезло, возможно ли это, знаете ли вы? // div [@ class = 't-precautionsSourceGrid'] // table [1] // td [1] // div - это то, что я пытался. Также, если есть много divs между классом и таблицей, они должны быть включены в строку xpath? – tesposito

+0

Не нужно. Просто читайте об одной косой чертой и двойных косых чертах в [xpath] (http://courses.ischool.berkeley.edu/i290-14/s05/lecture-4/allslides.html) – Madhan

0

В случае, если кто-либо еще это прочитает. Это то, к чему я придумал, используя атрибут cls, чтобы сделать xpath более понятным для моих целей.

driver.findElement(By.xpath("//div[@class='x-panel <cls attribute name> x-box-item x-panel-default x-grid']/div[4]/div/div/table/tbody/tr/td/div")); 

Это все еще довольно уродливое, но оно функционирует.

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

driver.findElement(By.className("<cls attribute>")) 
      .findElement(By.className("x-grid-item-container")) 
      .findElement(By.className("x-grid-cell")); 

Или

driver.findElement(By.className("t-allergiesSourceGrid")) 
      .findElement(By.className("x-grid-item-container")) 
      .findElement**s**(By.className("x-grid-cell")); 

Затем возьмите что-нибудь в GridPanel. Я не видел ни одного примера, использующего этот метод цепочки, и не понимал, что это возможно.

Смежные вопросы