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)