Python Selenium-在Linux上缓慢执行send_keys()

Python Selenium-在Linux上缓慢执行send_keys(),python,selenium,Python,Selenium,我的硒测试有一个最奇怪的问题。 我有以下课程: class DataStorageTestSuiteChrome(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path="chrome_driver_path") self.driver.maximize_window() self.driver.get(&q

我的硒测试有一个最奇怪的问题。 我有以下课程:

class DataStorageTestSuiteChrome(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome(executable_path="chrome_driver_path")
        self.driver.maximize_window()
        self.driver.get("www.data_storage_website.com")
        self.page = DataStoragePage(self.driver)

    def tearDown(self):
        self.driver.quit()

    def test_sn_validation(self):
        self.page.sn_element = 20001234567    # This line takes 2.5min to execute in Linux
        self.assertFalse(self.page.is_valid_sn())

        self.page.sn_element = self.ID_GENERATOR.sn
        self.assertTrue(self.page.is_valid_sn())
现在的问题是,测试用例“test\u sn\u validation”在Windows中执行需要几秒钟(无头模式和关闭模式),而在WSL2 Ubuntu中执行需要2.5分钟。这显然让我很困惑,因为我希望这样的测试在Linux上运行得更快

由于send\u keys()方法,我已经跟踪到了SnElement类中的
driver.find\u元素(By.XPATH,self.locator).send\u keys(value)
的缓慢行为原因。此外,该延迟仅在第一次运行send_keys()时发生-我通过PDB运行的每个后续执行都是瞬时的

是否有人在WSL2 for send_keys()中看到过类似的行为,并可以推荐解决方案?

简而言之,它的“键入”速度很慢,有一个从剪贴板粘贴的解决方法。至于配置打字速度,没什么可说的

解决方法如下所示:

import pyperclip
from selenium.webdriver.common.keys import Keys
pyperclip.copy('foo')
element.send_keys(Keys.CONTROL, 'v')

我希望这会有帮助

我认为它与Linux无关。 两个可能的原因:

1您的
某些正在工作的定位器
没有真正工作。然而,我不知道为什么在150秒后,而不是150秒后,if无法定位

2您的等待不正确。适当的方法是:

WebDriverWait(driver, 100).until(
                lambda driver: driver.find_element_by_xpath(self.locator))
注意,定位器应该是字符串

3尝试使用:

wait.until(EC.element_to_be_clickable((By.XPATH, 'self.locator')))

相反。检查这个答案

您的项目中可能还有隐含的等待,这可能是等待时间更长的原因。不要设置等待时间太长。对于99%的情况,30秒就足够了

4还有一个注意事项: 将SnElement的最后一行更改为

driver.find_element_by_xpath(self.locator).clear()
driver.find_element_by_xpath(self.locator).send_keys(value)

然后检查是否有帮助。

不幸的是,情况并非如此。它是一个literally send_keys()方法,在第一次运行时将代码冻结2.5分钟(在PDB中签入)。1。首先尝试用上述建议替换此等待。2您是否使用隐式等待?3定位器是什么?
wait.until(EC.element_to_be_clickable((By.XPATH, 'self.locator')))
wait.until(EC.visibility_of_element_located((By.XPATH, 'self.locator'))) 
driver.find_element_by_xpath(self.locator).clear()
driver.find_element_by_xpath(self.locator).send_keys(value)