如何降低输入字符的速度selenium python

2024-10-01 11:41:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我的自动测试给出单词“MyApplication”,速度很快,我需要在0.5-0.7秒内输入这个单词。我知道我可以用时间。睡觉,但我想知道另一个解决方案,我如何才能做到与众不同? 我不想要时间。睡觉,因为对服务器的查询只有300毫秒,无法更改。打字速度不快。在

是的,这是自动测试。通过send keys方法输入到输入的文字。在

WebDriverWait(driver, 10).until(
    EC.element_to_be_clikable((By.XPATH, "myypath"))
)
driver.find_element(By.XPATH, "myypath").send_keys("MyApplication")

Tags: 服务器sendbydriver时间elementkeys解决方案
1条回答
网友
1楼 · 发布于 2024-10-01 11:41:45

或者引入一个与页面可以处理的最短可接受时间相匹配的延迟:

from selenium import webdriver
import time

def send_delayed_keys(element, text, delay=0.3) :
    for c in text :
        endtime = time.time() + delay
        element.send_keys(c)
        time.sleep(endtime - time.time())


driver = webdriver.Chrome()
driver.get("https://www.google.com/search")

element = driver.find_element_by_css_selector('[name="q"]')
send_delayed_keys(element, "abcdef", 0.6)

或者发送每个密钥并等待没有挂起的请求:

^{pr2}$
class AjaxWaiter(object):

    JS_IS_XHR_IDLE = """\
if (!('active' in XMLHttpRequest))(function (){
  var _send = XMLHttpRequest.prototype.send;
  function _onrelease(){  XMLHttpRequest.active };
  function _onloadend(){ setTimeout(_onrelease, 1) };
  XMLHttpRequest.active = 0;
  XMLHttpRequest.prototype.send = function send() {
    ++XMLHttpRequest.active;
    this.addEventListener('loadend', _onloadend, true);
    _send.apply(this, arguments);
  };
})();
return XMLHttpRequest.active == 0;
"""

    def __init__(self, driver, timeout=10, frequency=0.08) :
        self.driver = driver
        self.waiter = WebDriverWait(self, timeout, frequency)
        self.driver.execute_script(self.JS_IS_XHR_IDLE)

    def is_idle(self) :
        return self.driver.execute_script(self.JS_IS_XHR_IDLE)

    def wait_idle(self) :
        self.waiter.until(AjaxWaiter.is_idle, "Pending requests")

相关问题 更多 >