首页 > 解决方案 > 为什么 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()

标签: pythonseleniumselenium-chromedriverwebassembly

解决方案


问题是您没有正确使用少数字段。

检查这有多快并修复您的定位器。

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()上传后尝试添加。等待时间取决于上传所需的时间。然后用显式等待替换这个时间。

我认为您在上传文件时也有问题,请验证它。但这是一个不同的问题。


推荐阅读