1

重要な注意:私はセレン== 4.0.0b3を使用しています

Selenium-webdriverを使用して既存のものをアップロードするプロセス中に、ファイルが実際に存在することを確認して、実際に何かをアップロードし、それと一貫性があることを確認するテストを行いました。私のテストコード:

print("Is filepath", os.path.isfile(local_photo_path))
file_inputs[0].send_keys(os.path.abspath(local_photo_path))

    

ファイルパスは True 値を示しますが、次のエラーが発生します。

Is filepath True
ERROR [_CatchWebDriverError][204] invalid argument: File not found : /tmp/69f9dddf-6f69-490e-9ed3-d9a379e151af.jpg
  (Session info: chrome=89.0.4389.90)
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: File not found : /tmp/69f9dddf-6f69-490e-9ed3-d9a379e151af.jpg
  (Session info: chrome=89.0.4389.90)
Stacktrace:
#0 0x56282084f2b9 <unknown>

Selenium のドキュメントを読むと、正しくやっているようです。これが実際の Selenium 関数です。

def send_keys(self, *value) -> None:
    """Simulates typing into the element.

    :Args:
        - value - A string for typing, or setting form fields.  For setting
          file inputs, this could be a local file path.

    Use this to send simple key events or to fill out form fields::

        form_textfield = driver.find_element(By.NAME, 'username')
        form_textfield.send_keys("admin")

    This can also be used to set file inputs.

    ::

        file_input = driver.find_element(By.NAME, 'profilePic')
        file_input.send_keys("path/to/profilepic.gif")
        # Generally it's better to wrap the file path in one of the methods
        # in os.path to return the actual path to support cross OS testing.
        # file_input.send_keys(os.path.abspath("path/to/profilepic.gif"))

    """
    # transfer file to another machine only if remote driver is used
    # the same behaviour as for java binding
    print('This is send keys')
    if self.parent._is_remote:
        local_files = list(map(lambda keys_to_send:
                               self.parent.file_detector.is_local_file(str(keys_to_send)),
                               ''.join(map(str, value)).split('\n')))
        if None not in local_files:
            remote_files = []
            for file in local_files:
                remote_files.append(self._upload(file))
            value = '\n'.join(remote_files)

    self._execute(Command.SEND_KEYS_TO_ELEMENT,
                  {'text': "".join(keys_to_typing(value)),
                   'value': keys_to_typing(value)})
4

0 に答える 0