python - 为什么 selenium 运行 webassembly 驱动的应用程序比手动测试慢 5 倍?
问题描述
我正在测试一个使用 Vue.js 框架并在后台运行 WebAssembly 二进制文件的 Web 应用程序。使用 python 和 google chrome 驱动程序中的 selenium 运行完全相同的任务比手动启动任务要慢得多。而且我不是在谈论检测页面上的任何元素等。我具体指的是运行 wasm 模块本身的执行时间(网络应用程序报告执行时间)。任何想法为什么会这样?我正在使用 Fedora Linux 32,它是 Google Chrome 90.0.4430.85(官方构建)(64 位)的最新发行版更新(因此我相信网络驱动程序也是 90 版)。PS这是我指的应用程序: https ://durrantlab.pitt.edu/webina/
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
import argparse
from pathlib import Path
def dir_path(string):
if Path(string).exists():
return Path(string).resolve()
else:
raise FileNotFoundError(string)
parser = argparse.ArgumentParser(description='Pass arguments to feed to webina.')
parser.add_argument('--receptor', type=dir_path, required=True)
parser.add_argument('--ligand', type=dir_path, required=True)
parser.add_argument('--center_x', type=float, required=True)
parser.add_argument('--center_y', type=float, required=True)
parser.add_argument('--center_z', type=float, required=True)
parser.add_argument('--size_x', type=float, required=True)
parser.add_argument('--size_y', type=float, required=True)
parser.add_argument('--size_z', type=float, required=True)
args = parser.parse_args()
browser = webdriver.Chrome()
browser.get('https://durrantlab.pitt.edu/webina/')
receptor_file = browser.find_element_by_id('__BVID__16')
lignad_file = browser.find_element_by_id('__BVID__20')
center_x = browser.find_element_by_id('center_x')
center_y = browser.find_element_by_id('center_y')
center_z = browser.find_element_by_id('center_z')
size_x = browser.find_element_by_id('size_x')
size_y = browser.find_element_by_id('size_y')
size_z = browser.find_element_by_id('size_z')
start_webina = browser.find_element_by_xpath("//*[contains(text(), 'Start Webina')]")
center_x.send_keys(repr(args.center_x))
center_y.send_keys(repr(args.center_y))
center_z.send_keys(repr(args.center_z))
size_x.send_keys(repr(args.size_x))
size_y.send_keys(repr(args.size_y))
size_z.send_keys(repr(args.size_z))
receptor_file.send_keys(str(args.receptor))
lignad_file.send_keys(str(args.ligand))
start_webina.click()
WebDriverWait(browser, 100000).until(ec.visibility_of_element_located((By.XPATH, "//*[contains(text(), 'Standard Output')]/../div/button")))
standard_download = browser.find_element_by_xpath("//*[contains(text(), 'Standard Output')]/../div/button")
standard_download.click()
pdbqt_download = browser.find_element_by_xpath("//*[contains(text(), 'Output PDBQT')]/../div/button").click()
browser.implicitly_wait(5)
browser.quit()
解决方案
问题是您没有正确使用少数字段。
检查这有多快并修复您的定位器。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
browser = webdriver.Chrome()
browser.get('https://durrantlab.pitt.edu/webina/')
browser.implicitly_wait(15)
# receptor_file = browser.find_element_by_id('__BVID__16')
# lignad_file = browser.find_element_by_id('__BVID__20')
center_x = browser.find_element_by_id('center_x')
center_y = browser.find_element_by_id('center_y')
center_z = browser.find_element_by_id('center_z')
size_x = browser.find_element_by_id('size_x')
size_y = browser.find_element_by_id('size_y')
size_z = browser.find_element_by_id('size_z')
start_webina = browser.find_element_by_xpath("//*[contains(text(), 'Start Webina')]")
center_x.send_keys("test")
center_y.send_keys("test")
center_z.send_keys("test")
size_x.send_keys("test")
size_y.send_keys("test")
size_z.send_keys("test")
start_webina.click()
WebDriverWait(browser, 10).until(
ec.visibility_of_element_located((By.XPATH, "//*[contains(text(), 'Standard Output')]/../div/button"))) # Here will be thrown timeout because element is not found
standard_download = browser.find_element_by_xpath("//*[contains(text(), 'Standard Output')]/../div/button")
standard_download.click()
pdbqt_download = browser.find_element_by_xpath("//*[contains(text(), 'Output PDBQT')]/../div/button").click()
browser.quit()
start_webina.click()
由于某些字段未设置,站点将不允许执行操作。
回答你的问题:因为WebDriverWait(browser, 100000).
100000,测试很慢!!秒超时有点大,你不这么认为吗?
还要注意我在哪里设置隐式等待以及在哪里设置。
编辑:您在那里添加一些文件。time.wait()
上传后尝试添加。等待时间取决于上传所需的时间。然后用显式等待替换这个时间。
我认为您在上传文件时也有问题,请验证它。但这是一个不同的问题。
推荐阅读
- google-sheets - 将小数与主数分开并相乘
- typescript - 基于继承的 Typescript 泛型类型推断
- javascript - 我是 Javascript 的新手,并且正在努力获得一个简单的表单来工作。我能得到一些建议吗?
- php - curl远程登录问题
- android - Android - RelativeLayout 中的最后一个视图消失
- angular - Angular 8:单例服务在每次需要新文件时创建新实例
- java - 如何在底部导航菜单单击上恢复片段?
- javascript - 每隔几分钟刷新一次页面
- flutter - 未处理的异常:MissingPluginException(在通道 toasty 上找不到方法 warningToast 的实现)
- django - 是否可以仅使用 Django 异步呈现模板/页面的不同部分/选项卡?