gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:56:20 25 4
gpt4 key购买 nike

我的自动测试给出了单词“MyApplication”,它的速度非常快,我需要在大约 0.5-0.7 秒内输入该单词。我知道我可以使用 time.sleep,但我想知道另一个解决方案,我该如何做不同的事情?我不需要 time.sleep,因为对服务器的查询仅持续 300 毫秒并且无法更改。快速打字会导致测试无法工作。

是的,这是一个自动测试。通过发送键方法输入的输入的铭文。

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

最佳答案

要么引入一个延迟,该延迟将与页面可以处理的最短可接受时间相匹配:

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)

或者发送每个 key 并等待没有待处理的请求:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time

def send_autocomplete_keys(element, text) :
ajax = AjaxWaiter(element.parent)

for c in text :
element.send_keys(c)
ajax.wait_idle()


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

element = driver.find_element_by_css_selector('[name="q"]')
send_autocomplete_keys(element, "abcdef")
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")

关于python - 如何降低selenium python输入字符的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50139506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com