В чем разница между «Ввод текста» и «Нажатие клавиш»? - PullRequest
0 голосов
/ 07 октября 2019

Когда я использую «Ввод текста» для ввода текста в текстовое поле, иногда возникает какая-то ошибка?
введите описание изображения здесь

Но я просто изменяю "«Ввод текста» для «Нажатия клавиш» будет работать нормально.

Примечание: XPATH верный.

Selenium doc:

Ввод текста-> Вводит указанный текст втекстовое поле, идентифицированное локатором.

Нажать клавиши-> Имитирует нажатие клавиш пользователем на элементе или в активном браузере.

Ответы [ 3 ]

1 голос
/ 07 октября 2019

В основном они практически идентичны. Robot Framework использует SeleniumLibrary , который оборачивает веб-драйвер ключевыми словами «оболочка». Ниже вы можете найти некоторый фрагмент кода, который определяет соответствующий код:

def _input_text_into_text_field(self, locator, text, clear):
    element = self.find_element(locator)
    if is_truthy(clear):
        element.clear()
    element.send_keys(text)

def _press_keys(self, locator, parsed_keys):
    if is_truthy(locator):
        element = self.find_element(locator)
    else:
        element = None
    for parsed_key in parsed_keys:
        actions = ActionChains(self.driver)
        special_keys = []
        for key in parsed_key:
            if self._selenium_keys_has_attr(key.original):
                special_keys = self._press_keys_special_keys(actions, element, parsed_key,
                                                             key, special_keys)
            else:
                self._press_keys_normal_keys(actions, element, key)
        for special_key in special_keys:
            self.info('Releasing special key %s.' % special_key.original)
            actions.key_up(special_key.converted)
        actions.perform()

def _press_keys_normal_keys(self, actions, element, key):
    self.info('Sending key%s %s' % (plural_or_not(key.converted), key.converted))
    if element:
        actions.send_keys_to_element(element, key.converted)
    else:
        actions.send_keys(key.converted)

def _press_keys_special_keys(self, actions, element, parsed_key, key, special_keys):
    if len(parsed_key) == 1 and element:
        self.info('Pressing special key %s to element.' % key.original)
        actions.send_keys_to_element(element, key.converted)
    elif len(parsed_key) == 1 and not element:
        self.info('Pressing special key %s to browser.' % key.original)
        actions.send_keys(key.converted)
    else:
        self.info('Pressing special key %s down.' % key.original)
        actions.key_down(key.converted)
        special_keys.append(key)
    return special_keys

Другими словами, когда вы вызываете Input Text, он сначала пытается очистить поле (в отличие от вызова Press Keys). Но с Input Text вы не сможете генерировать некоторые нажатия клавиш, такие как «Вверх, вниз» и т. Д.

Нажмите клавиши, возможность отправки некоторых «специальных» клавиш может генерировать события для элементов, которые не могутбыть сгенерировано Input Text. Такие события могут обрабатываться особым образом на тестируемой странице, поэтому последний метод гипотетически может расширить охват ваших тестов (в зависимости от того, действительно ли эти события обрабатываются каким-либо особым образом в вашем приложении).

0 голосов
/ 07 октября 2019

В каком состоянии находится элемент при сбое сценария?

Вы можете попробовать ключевое слово Wait Until Element Is Enabled. Кроме того, в некоторых случаях вам нужно щелкнуть элемент, чтобы сделать его редактируемым.

0 голосов
/ 07 октября 2019

Ввод текста: найдите элемент в DOM и отправьте свой текст, нажимая клавиши, выполняющие операции на клавиатуре.

Вы получаете исключение устаревшего элемента, которое означает, что элемент не готов, и переходите в устаревшую ситуацию, чтобы разрешить ее, либо вам нужночтобы дождаться разрешения устаревания для выполнения действия, такого как обновление, выполните цикл с несколькими попытками

Код JAVA, который может ждать, как показано ниже:

 WebDriverWait wait = new WebDriverWait(driver, 60);
 wait.until(ExpectedConditions.stalenessOf(element)

ИЛИ

вы также можете обновитьна странице, попробуйте:

driver.navigate().refresh();

использовать обновление перед выдачей элемента Исключение устаревшей ссылки

Измените синтаксис кода согласно вашему требованию

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