2016-03-17 17 views
0

У меня появилось диалоговое окно с нажатием на элемент. В этом диалоговом окне есть 2 таблицы (HTML). Таблица в таблице. Таблица 1 содержит текст «Коды аудита соответствия» Таблица 2 содержит несколько строк и столбцов. В колонке 1 установлен флажок. Столбец 2 имеет значение char, например. буква «I») В колонке 3 есть текст, например. «Совпадение с полным адресом»Selenium Python Как найти правильный элемент флажка из таблицы HTML в таблице с помощью XPath

Я хотел бы найти флажок из колонки 1, который имеет описание текста «Совпадение с полным адресным» и родительской таблицу имеют текст «коды аудита Match "

Я попытался следующий Xpath, который определяет местонахождение флажок, который имеет текст„Совпадение с полным адресом“

//div[contains(text(), "Matched to full address")]/ancestor::tr[1]/td[1]//input 

Мой скрипт Selenium Python не будет нажимать на этот флажок. Разработчик говорит, что где-то в HTML может быть больше 1 «Совместный полный адрес».

мне нужно Xpath начать с родительской таблицы, которая имеет текст «коды аудита соответствует», а затем спуститься к следующей таблице которая имеет текст «Совпадение с полным адресом» и затем установите флажок.

Как я могу построить Xpath, пожалуйста?

HTML, является:

<table class="GJPPK2LBAL" cellspacing="0" cellpadding="0"> 
    <tbody> 
    <tr> 
     <td align="left" style="vertical-align: top;"> 
      <div class="GJPPK2LBPK">Match audit codes</div> 
     </td> 
     <td align="left" style="vertical-align: top;"> 
      <button class="gwt-Button GJPPK2LBLK" type="button">X</button> 
     </td> 
    </tr> 
    </tbody> 
</table> 
<table class="GJPPK2LBOK" cellspacing="0" cellpadding="0"> 
    <tbody> 
    <tr> 
     <td align="left" style="vertical-align: middle;"> 
      <table cellspacing="0" cellpadding="0"> 
       <tbody> 
       <tr> 
       <tr> 
        <td align="left" style="vertical-align: top;"> 
         <div style="overflow: auto; position: relative; width: 25em;"> 
          <div style="position: relative;"> 
           <table class="GJPPK2LBJE" cellspacing="0" 
             __gwtcellbasedwidgetimpldispatchingfocus="true" 
             __gwtcellbasedwidgetimpldispatchingblur="true"> 
            <thead aria-hidden="false"> 
            <colgroup> 
            <tbody> 
            <tr class="GJPPK2LBCD" __gwt_subrow="0" __gwt_row="0"> 
             <td class="GJPPK2LBBD GJPPK2LBDD GJPPK2LBED"> 
              <div __gwt_cell="cell-gwt-uid-5972" style="outline-style:none;"> 
               <input type="checkbox" tabindex="-1"/> 
              </div> 
             </td> 
             <td class="GJPPK2LBBD GJPPK2LBDD"> 
              <div __gwt_cell="cell-gwt-uid-5973" style="outline-style:none;">I</div> 
             </td> 
             <td class="GJPPK2LBBD GJPPK2LBDD GJPPK2LBOD"> 
              <div __gwt_cell="cell-gwt-uid-5974" style="outline-style:none;">Matched to 
               full address 
              </div> 
             </td> 
            </tr> 
            <tr class="GJPPK2LBCE" __gwt_subrow="0" __gwt_row="1"> 
             <td class="GJPPK2LBBD GJPPK2LBDE GJPPK2LBED"> 
              <div __gwt_cell="cell-gwt-uid-5972" style="outline-style:none;"> 
               <input type="checkbox" tabindex="-1"/> 
              </div> 
             </td> 
             <td class="GJPPK2LBBD GJPPK2LBDE"> 
              <div __gwt_cell="cell-gwt-uid-5973" style="outline-style:none;">B</div> 
             </td> 
             <td class="GJPPK2LBBD GJPPK2LBDE GJPPK2LBOD"> 
              <div __gwt_cell="cell-gwt-uid-5974" style="outline-style:none;">Matched to 
               building 
              </div> 
             </td> 
            </tr> 
            <tr class="GJPPK2LBCD" __gwt_subrow="0" __gwt_row="2"> 
            <tr class="GJPPK2LBCE" __gwt_subrow="0" __gwt_row="3"> 
            </tbody> 
            <tbody style="display: none;"> 
            <tfoot style="display: none;" aria-hidden="true"/> 
           </table> 

Спасибо, Riaz

ответ

3

Я не уверен, что у меня возник вопрос. Вы хотите найти таблицу, содержащую «Коды аудита соответствия», затем перейдите к следующей таблице, содержащей «Соответствует полному адресу», и внутри этой таблицы найдите флажок в той же строке, что и текст «Совместный полный адрес»?

Если это так, то он должен выглядеть следующим образом:

//table[.//div[text()='Match audit codes']]/following-sibling::table[.//div[.='Matched to full address']][1]//div[.='Matched to full address']/ancestor::tr[1]/td//input[@type='checkbox'][1] 

Если .='Matched to full address' не работает, попробуйте contains(.,'Matched to full address') вместо этого.

+0

Да, это работает. Теперь Selenium нажимает на элемент. Спасибо за помощь! –

+0

Рад, что я мог помочь! В следующий раз попытайтесь опубликовать полный действительный XHTML. Это облегчает воспроизведение, поэтому вы получите больше ответов быстрее. –

1

Вот подсказка:

Найти все элементы с текстом, чтобы быть согласованы.

List<WebElement> texts = driver.findElements(By.xpath("//td[@class='GJPPK2LBBD GJPPK2LBDE GJPPK2LBOD']")); 

Теперь сохраните указатели элементов, которые содержат нужный текст.

List<Integer> list = new ArrayList<>(); 
for(int i=0;i<list.size();i++){ 
if(text.get(i).getText().equals("Matched to full address")) 
list.add(i); 
} 

Теперь у вас есть список всех индексов с текстом «Совместный с полным адресом». Теперь вы можете вызывать соответствующие флажки и играть.

List<WebElement> checks = driver.findElements(By.xpath("//td[@class='GJPPK2LBBD GJPPK2LBDE GJPPK2LBED']")); 

for(int index:checks){ 
WebElement cb = checks.get(index); 
//Do something with cb 
} 

Надеюсь, что это поможет.

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