2016-10-03 9 views
2

Webページにいくつかの行と列を持つHTMLテーブルがあります。私は、各行の列に値を書き込もうとしています。行1の値STR [ウィスコンシンSI 90] LC2 [ウィスコンシンSI 90]を有するSelenium Python send_keysを使用してHTMLテーブルの列に値を書き込もうとしています

行2、行3が有する値STR [ウィスコンシンSI 90] LC3 [ウィスコンシンSI 90]

を有します値STR [wi si 90] PCD [maj mpc]

各行について、値90を98と置き換えたいと考えています。 例行1は今STR [のWi SI 98] LC2 [ウィスコンシンSI 98]

する必要があります私は、次のコードを試してみましたが、それは何もしていません。

def enter_a_street_rule_from_street_rules_listbox(self, street_rule, new_street_rule): # enter the street rule value so all the street rules have the value 98 from page 13 of the regression test script e.g. STR[wi si 98] LC2[wi si 98] 
    # Params street_rule : E.g. STR[wi si 90] LC2[wi si 90] 
    # Params new_street_rule : E.g. STR[wi si 98] LC2[wi si 98] 
    street_rules_listbox_element = self.get_element(By.XPATH, '//table[@id="data_configuration_add_data_object_tab_address_rules_tb_level_rules_street"]//tr//td//div[contains(text(),"%s")]' % street_rule) 
    street_rules_listbox_element.send_keys(new_street_rule) 

メソッドを呼び出すためのコードは次のとおりです。

data_objects_address_rules_tab.enter_a_street_rule_from_street_rules_listbox("STR[wi si 90] LC2[wi si 90]", "STR[wi si 98] LC2[wi si 98]") 

HTMLスニペット:

<table id="data_configuration_add_data_object_tab_address_rules_tb_level_rules_street" class="GFNQNVHJE border" cellspacing="0" __gwtcellbasedwidgetimpldispatchingfocus="true" __gwtcellbasedwidgetimpldispatchingblur="true" style="min-width: 350px;"> 
    <thead aria-hidden="false"> 
     <colgroup> 
      <tbody> 
       <tr class="GFNQNVHCD" __gwt_subrow="0" __gwt_row="0"> 
        <td class="GFNQNVHBD GFNQNVHDD GFNQNVHED"> 
         <td class="GFNQNVHBD GFNQNVHDD GFNQNVHOD"> 
          <div __gwt_cell="cell-gwt-uid-7176" style="outline-style:none;">STR[wi si 90] LC2[wi si 90]</div> 
         </td> 
        </tr> 
        <tr class="GFNQNVHCE" __gwt_subrow="0" __gwt_row="1"> 
         <tr class="GFNQNVHCD" __gwt_subrow="0" __gwt_row="2"> 
          <td class="GFNQNVHBD GFNQNVHDD GFNQNVHED"> 
           <td class="GFNQNVHBD GFNQNVHDD GFNQNVHOD"> 
            <div __gwt_cell="cell-gwt-uid-7176" style="outline-style:none;">STR[wi si 90] PCD[maj mpc]</div> 
           </td> 
          </tr> 
         </tbody> 
         <tbody style="display: none;"> 
          <tfoot style="display: none;" aria-hidden="true"/> 
</table> 

私は要素を識別するために、次のXPathを使用することができます

By.XPATH, '//table[@id="data_configuration_add_data_object_tab_address_rules_tb_level_rules_street"]//tr//td//div[contains(text(),"%s")]' % street_rule 

各行の値90を98に置き換えるにはどうすればよいですか? ありがとう、Riaz

私は今すぐ仕事があります。私は、GUI上の追加ボタンをクリックする代わりの方法を見つけました。 HTMLにInputタグが表示されていることに気付きました。私はinput要素を見つけて、send_keysを使って入力フィールドに値を入力しました。

inputタグを見つけて、値を入力するコードである:

def enter_a_street_rule_in_street_rules_listbox(self, new_street_rule): 
    # Params new_street_rule : E.g. STR[wi si 98] LC2[wi si 98] 
    street_rules_listbox_element = self.get_element(By.XPATH, '//table[@id="data_configuration_add_data_object_tab_address_rules_tb_level_rules_street"]//tr//td//div//input[@value="Enter rule"]') 
    street_rules_listbox_element.send_keys(new_street_rule) 

要素を検索するXPATHである:

'//table[@id="data_configuration_add_data_object_tab_address_rules_tb_level_rules_street"]//tr//td//div//input[@value="Enter rule"]' 

呼び出しコード、メソッドを呼び出す:

data_objects_address_rules_tab.click_add_button() 
data_objects_address_rules_tab.enter_a_street_rule_in_street_rules_listbox("STR[wi si 98] LC2[wi si 98]") 
+0

sendkeysはtextbox、textareaなどの入力タグでのみ動作します。 innerhtml関数でdivのhtmlを変更するにはjavascriptを使用する必要があります。 – Grasshopper

+0

ありがとう、私はそれを行う別の方法を発見しました。 GUIの追加ボタンをクリックすると、HTMLタグに入力タグが表示されます。私はsend_keysを使って入力フィールドに値を入力しました。私の質問の一番下にコードを入れます –

答えて

1

.send_keys()は、キーボード入力を受け取る要素に対してのみ機能します。私はこれがここに当てはまるとは思わない。あなたはページのHTMLを変更することを話しています。これはできますが、一時的なものです。ページ(またはページのそのセクション)がリロードされると、変更は失われます。

この場合でもJavascriptExecutorを使用して.innerHTML"STR[wi si 98] LC2[wi si 98]"などの任意の値を設定することができます。

+0

ウェブページのhtmlテーブルに値を入力すると、保存ボタンをクリックして変更を保存できます。ページに保存ボタンがあります –

+0

私ができることは、ページのhtmlテーブルからすべてのチェックボックスを選択し、ストリートルールを削除できることです。次に、追加ボタンをクリックして、新しいストリートルールを追加することができます。追加ボタンをクリックするとHTMLテーブルに入力フィールドが表示されます –

+1

これが当てはまる場合は、ページに '.innerHTML'を設定する必要はありません。ユーザーがページ上の表を更新する方法を記述する必要があります。私はそれを見ていないので、それが何であるかを私はあなたに伝えることはできません。 – JeffC

関連する問題