Python с ошибкой Selenium TypeError: не все аргументы преобразованы во время форматирования строки - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь найти элемент на странице и затем щелкнуть этот элемент с помощью этого кода:

def delete_button(self, app_name):
    return self.wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@action='delete']" % app_name)))

def delete_button_click(self, app_name):
    self.add_step("Click on Delete Button")
    return self.delete_button(app_name=app_name).click()

Вот ошибка

endtoendtests\nondevicestests\applications\test_role_operations_applications.py:199:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
..\pydashboardui\pages\ApplicationsPage.py:111: in delete_button_click
    return self.delete_button(app_name=app_name).click()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <ApplicationsPage.ApplicationsPage object at 0x04BF6450>, app_name = 'Custom App Gulbrandsen'

    def delete_button(self, app_name):
>       return self.wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@action='delete']" % app_name)))
E       TypeError: not all arguments converted during string formatting

..\pydashboardui\pages\ApplicationsPage.py:107: TypeError

Я не понимаю, что яделать, чтобы вызвать это.

Вот полный тест, который вызывает эту функцию

 @pytest.mark.parametrize('user_type', USER_TYPES_TO_TEST)
    def test_user_roles_delete_applications(self, setup, user_type):
        """Verify user roles that can delete applications"""
        log.info('test_user_roles_delete_applications')
        self.ui.login(username=self.pyitbase.master_ta_user, password=self.pyitbase.master_ta_pwd)
        self.ui.ta_home_page.navigate_to(page="applications")
        time.sleep(1)
        app1 = self.create_custom_application()[0]
        self.ui.toast_message_element_click()
        self.ui.ta_home_page.navigate_to(page="applications")
        time.sleep(1)
        app2 = self.create_custom_application()[0]
        self.ui.toast_message_element_click()
        user = self.pyitbase.create_new_user(user_type=user_type)[0]
        self.ui.login(username=user['userName'], password=self.pyitbase.generic_pwd)
        self.ui.ta_home_page.navigate_to("applications")
        time.sleep(5)
        Steps.add("Verify if user role {} can delete applications on manage tab".format(user_type))
        if user_type not in self.ROLES_FOR_APPLICATIONS:
            try:
                self.ui.applications_page.delete_button_click(app_name=app1)
                time.sleep(5)
                assert False
            except NoSuchElementException:
                assert True
        else:
            self.ui.applications_page.delete_button_click(app_name=app1)
            time.sleep(5)
            self.ui.confirm_modal.confirm_button_click()
            assert self.ui.verify_toaster(expected_text=self.ui.applications_page.SUCCESS_DELETE_APP.format(app1))
            self.ui.toast_message_element_click()
        self.ui.applications_page.app_name_link_click(app_name=app2)
        time.sleep(5)
        Steps.add("Verify if user role {} can delete applications on details page".format(user_type))
        if user_type not in self.ROLES_FOR_APPLICATIONS:
            try:
                self.ui.applications_detail_page.delete_button_click()
                time.sleep(.5)
                assert False
            except NoSuchElementException:
                assert True
        else:
            self.ui.applications_detail_page.delete_button_click()
            time.sleep(.5)
            self.ui.confirm_modal.confirm_button_click()
            assert self.ui.verify_toaster(expected_text=self.ui.applications_page.SUCCESS_DELETE_APP.format(app2))

1 Ответ

0 голосов
/ 01 марта 2019

Вы не используете форматированный % аргумент.Если я запускаю ''%'hi', я получаю ту же ошибку, потому что python ожидает, что строковый аргумент будет отформатирован в строку, но он никогда не делает

Избавиться от %app_name в self.wait_until(EC.element_to_be_clickable((By.XPATH, "//button[@action='delete']" % app_name)))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...