当前位置: 首页 > 知识库问答 >
问题:

Selenium WebDrive Python单击单选按钮显示WebElement对象不可调用

蒙经纶
2023-03-14

我正在尝试单击网页上的单选按钮,我正在Selenium Webdriver Python中自动执行该按钮。当我的代码尝试单击单选按钮时,显示错误:
类型错误:“WebElement”对象不可调用:

完全错误是:

Traceback (most recent call last):
  File "C:\Webdriver\ClearCore\TestCases\MatchConfigrationPage_TestCase.py", line 85, in test_add_match_configuration_possibles_name
    possibles_match_rules_tab.click_selected_rule_radio_button("Name")
  File "C:\Webdriver\ClearCore\Pages\match_rules_tab.py", line 82, in click_selected_rule_radio_button
    radio_button = self.driver.find_element(By.XPATH, '//table[@id="match_configuration_add_possible_tab_match_rules_ct_mapping_body"]//span[@title="Name" and contains(text(), "Name")]//ancestor::tr[1]//input[@type="radio"]')
TypeError: 'WebElement' object is not callable

我可以在Firefox XPATH检查器中使用以下XPATH找到该按钮。

//table[@id="match_configuration_add_possible_tab_match_rules_ct_mapping_body"]//span[@title="Name" and contains(text(), "Name")]//ancestor::tr[1]//input[@type="radio"]

我调用按钮并单击的方法如下:

from selenium.webdriver.common.by import By

def click_selected_rule_radio_button(self, name):
    # params name: The name of the data object to be selected for the match rule, e.g. Name, Address
    radio_button = self.driver.find_element(By.XPATH, '//table[@id="match_configuration_add_possible_tab_match_rules_ct_mapping_body"]//span[@title="%s" and contains(text(), "%s")]//ancestor::tr[1]//input[@type="radio"]' (name, name))
    self.driver.execute_script("arguments[0].click()", radio_button)
    return self

方法中的name参数其值为“name”,%s在代码中的值为“name”

我还尝试了以下方法:

def click_selected_rule_radio_button2(self, name):
    # params name: The name of the data object to be selected for the match rule, e.g. Name, Address
    #WebDriverWait(self.driver, 20).until(EC.presence_of_all_elements_located((By.ID, 'match_configuration_add_possible_tab_match_rules_ct_mapping_body')))
    radio_button = WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.XPATH, '//table[@id="match_configuration_add_possible_tab_match_rules_ct_mapping_body"]//span[@title="Name" and contains(text(), "Name")]//ancestor::tr[1]//input[@type="radio"]')))
    radio_button.click()
    return self

从我的TestCase类中,我调用该方法,如下所示:

possibles_match_rules_tab.click_selected_rule_radio_button("Name")

测试用例的代码段如下:

def test_add_match_configuration_possibles_name(self):
        print "*** Test add Match Configuration Possibles - Name ***"
        projectNavigator = project_navigator.ProjectNavigatorPage(self.driver)
        possiblesPage = projectNavigator.select_projectNavigator_item("Possibles") # click Possibles from project navigator
        possiblesPage.click_add_possibles_button()
        possiblesPage.enter_possible_matches_name_and_description_from_details_tab("name_dob", "date of birth possible match rule")
        possibles_match_rules_tab = possiblesPage.click_match_rules_tab()
        possibles_match_rules_tab.click_possibles_match_rules_add_button()
        possibles_match_rules_tab.enter_match_rule_name("name_dob")
        possibles_match_rules_tab.click_selected_rule_radio_button("Name")

超文本标记语言是:

<table id="match_configuration_add_possible_tab_match_rules_ct_mapping_body" cellspacing="0" style="table-layout: fixed; width: 100%;">
<colgroup>
    <tbody>
        <tr class="GPI5XK1CFG" __gwt_subrow="0" __gwt_row="0">
            <td class="GPI5XK1CEG GPI5XK1CGG GPI5XK1CHG">
                <div __gwt_cell="cell-gwt-uid-339" style="outline-style:none;" tabindex="0">
                    <input type="radio" name="rbCrossRow2" />
                </div>
            </td>
            <td class="GPI5XK1CEG GPI5XK1CGG">
                <div __gwt_cell="cell-gwt-uid-340" style="outline-style:none;">
                    <span class="" title="Name" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;padding-right: 1px;">Name</span>
                </div>
            </td>
            <td class="GPI5XK1CEG GPI5XK1CGG GPI5XK1CBH">
                <div __gwt_cell="cell-gwt-uid-341" style="outline-style:none;">
                    <input id="match_configuration_add_possible_tab_match_rules_cb_name" type="checkbox" />
                </div>
            </td>
        </tr>
        <tr class="GPI5XK1CEH" __gwt_subrow="0" __gwt_row="1">
            <td class="GPI5XK1CEG GPI5XK1CFH GPI5XK1CHG">
                <div __gwt_cell="cell-gwt-uid-339" style="outline-style:none;">
                    <input type="radio" name="rbCrossRow2" />
                </div>
            </td>
            <td class="GPI5XK1CEG GPI5XK1CFH">
                <div __gwt_cell="cell-gwt-uid-340" style="outline-style:none;">
                    <span class="" title="Address" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;padding-right: 1px;">Address</span>
                </div>
            </td>
            <td class="GPI5XK1CEG GPI5XK1CFH GPI5XK1CBH">
        </tr>
        <tr class="GPI5XK1CFG" __gwt_subrow="0" __gwt_row="2">
            <tr class="GPI5XK1CEH" __gwt_subrow="0" __gwt_row="3">
    </tbody>

任何人都能看到问题所在,为什么单选按钮不可调用,它不会单击它?

谢了Riaz

共有1个答案

微生旻
2023-03-14

您可以使用JavaScript单击单选按钮。代码如下:

driver=webdriver.Chrome('./chromedriver.exe')
driver.get('your URL')
time.sleep(10)
radioButton = driver.find_element_by_xpath("Radio Button Xpath") #like //input[@id='female']
driver.execute_script("arguments[0].click();", radioButton)
#driver.quit()
 类似资料:
  • 此表单在基于函数的视图中显示单选按钮,但在我引入基于类的视图时更改为复选框,有什么解决办法。我希望他们再次显示单选按钮 表单.py models.py 模板 views.py

  • 链接到我正在尝试刮取的页面: https://www.nytimes.com/reviews/dining 因为这个页面有一个“show more”按钮,所以我需要Selenium自动反复单击“show more”按钮,然后以某种方式使用Beauty soup来获取页面上每个餐厅评论的链接。在下面的照片中,我想获取的链接位于https://...onigiri.html" 迄今为止的代码: 我如何

  • 我正在尝试通过xpath,css,ID...但什么都管用。 我总是得到错误:没有这样的元素:无法定位元素 我添加了一个明确的等待,但它仍然不起作用。 你能帮帮我吗? 单选按钮

  • 我有一个点击单选按钮的代码,一开始我用的是Chrome。使用下面的代码: 我发现了一个错误: 做研究的时候,我把代码改成: 当我单击单选按钮时,标签会在单击时获得一个附加属性。 其他编辑: 这组按钮如下所示:

  • 我有一个按钮(CustomDilaog活动),当点击显示自定义对话框和密码编辑文本,确定按钮和取消按钮时,如果你输入正确的密码,它会打开另一个活动(文本活动),直到现在一切正常, 我有两个部分的问题。 第一部分:当我在(文本活动)并按后退按钮返回(CustomDilaog活动)时,仍然对话框显示在它上面,如何让它关闭 第二部分:对话框启动后,如果我不写密码,只需单击“确定”按钮,edittext为