web自動化時,sendkeys輸入長文本時瀏覽器響應慢或錯誤時處理


在做某個測試時,要在文本框中輸入大量的文本,文件內容如下:

 

"-----BEGIN CERTIFICATE-----\n
MIIBozCCAQwCAQEwDQYJKoZIhvcNAQEFBQAwGjEYMBYGA1UEAwwPY2EtaW50QGFj\n
\"bWUuY29tMB4XDTE2MDMwNzExNTcyOVoXDTI2MDMwNTExNTcyOVowGjEYMBYGA1UE\n“
\"AwwPc2VydmVyQGFjbWUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+\n"
"RI+2JepsS1UuuLNne3sk/1nuLdXsDN/VH1+80tzfijSduFK3c+sg4NNwXsqV3D5Y\n"
"E1Ymi0/fvhRdo7J9yJJNq4ZM42nIgTM5jV9BW8JlE7UHZTUP3YomJcnTjfrsH2U5\n"
"rJPuxvwxJukrDDYqrrS/37Nhrr3UbMUBDETLFGg9BQIDAQABMA0GCSqGSIb3DQEB\n"
"BQUAA4GBACKvFUpVayVWgDGdwZpkr0EgXyifjO36a8IqTA55Bj4/5VLyUt+sCvNz\n"
"6Up64t+akAGPajrDv5IrmwDGYj88fE/vTd1lmCkt8Xi8ODgDhASQYh0lzEQ2nzyU\n"
"L7gyKtPvfZG5BZuf7whrV6y7klGDia9qL4dCmNUbOyRBeJON2DR5\n"
"-----END CERTIFICATE-----"

 

在FireFox中使用sendkeys輸入時,等待很久后提示

此頁面的某個腳本可能正忙,或者已停止響應。您可以立即終止該腳本、在調試器中打開該腳本,或者繼續等待該腳本完成

 

在使用chrome sendkeys后,沒有提示錯誤,但耗時很久。

解決思路:

1、查看問題原因:

看看sendkeys實現原理:

def send_keys(self, *value):
        """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
        if self.parent._is_remote:
            local_file = self.parent.file_detector.is_local_file(*value)
            if local_file is not None:
                value = self._upload(local_file)

        self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': keys_to_typing(value)})
View Code

再看keys_to_typing 可以看出,sendkeys是一個字符一個字符發的,所以在長文本時時間肯定會長,且在firefox中好像還有相關超時限制,這個不得而知了。

既然這樣的話,就不用senkeys 來輸入文本了。

解決方案二個:

1、使用js來輸入

示范代碼

js='document.getElementsByTagName("textarea")[0].value="'+lb_cert+"'"
driver.execute_script(js)

因為元素沒有id,所以只能用tagName

2、使用復制黏貼方式:

將文本寫入粘貼板,然后再發送CTRL+v,快速輸入,但需要安裝第三方庫

至於粘貼板后方法,python里太多庫可以支持,這里偷懶,從stackoverflow 拿來一段代碼直接使用

import win32clipboard  

def copy(text):
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()
def paste():
    win32clipboard.OpenClipboard()
    data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()
    return data

text=u"這里寫需要粘貼的文字"
copy(text)  --放入粘貼板
driver.findElements(By.tagname("textarea")).type(Keys.chord(keys.control, 'v')); ---粘貼

 

這里,可以根據實際使用不用的方法來實現

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM