Selenium Python我试图使用send_keys将值写入HTML表中的列

时间:2016-10-03 15:50:55

标签: python-2.7 xpath selenium-webdriver

我有一个HTML表,网页上有一些行和一列。我试图在每列的列中写入一个值。

第1行的值为STR [wi si 90] LC2 [wi si 90]

行2的值为STR [wi si 90] LC3 [wi si 90]

第3行的值为STR [wi si 90] PCD [maj mpc]

对于每一行,我想用98替换值90 例如。第1行现在应该是STR [wi si 98] LC2 [wi 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]")

1 个答案:

答案 0 :(得分:1)

.send_keys()仅适用于接受键盘输入的元素。我不认为这是这种情况。您正在谈论更改页面的HTML。这可以做到,但这只是暂时的。重新加载页面(或页面的该部分)后,更改将丢失。

如果您仍想这样做,可以使用JavascriptExecutor并将.innerHTML设置为"STR[wi si 98] LC2[wi si 98]"或您想要的任何内容。