我负责测试大量使用AJAX的企业Web应用程序.我需要构建一个允许在没有人为干预的情况下连续运行测试的系统.目前我最感兴趣的是负载测试,但我希望用于生成负载的相同脚本用于功能测试.
目前我正在使用磨床进行负载测试.我们记录脚本然后处理它们以处理异步请求.这个系统现在有效; 但是脚本很精致,在开发周期中我无法维护它们.我需要能够通过编程语言"运行浏览器",该语言抽象出html和javascript的细节,但它必须是无头的.换句话说,如果我的测试脚本中断,它必须代表应用程序的实际破坏.在xvfb中运行firefox 不起作用,因为即使在运行xvfb的无头linux机器上,firefox仍然使用太多资源.我尝试用无头x服务器下的webdriver驱动firefox.
我已经在HTMLUnit上工作了好几天,因为这是理想的解决方案.我一直在Jython中编写HTMLUnit驱动程序,因此我可以将它们与研磨机一起使用.不幸的是我遇到了javascript错误(这不是firefox/chrome/IE中的真正错误),我想我已经走到了尽头.无论如何我很清楚HtmlUnit,我真的需要一个替代品.
我知道还有其他一些解决方案(envjs和zombie.js); 但我不知道这些技术是如何发展的,我不想浪费另一个星期走向死胡同.
获取Firefox或Webkit的源代码并注释掉所有渲染/ GUI调用并创建真正的无头浏览器有多难?这已经完成了吗?一个人比另一个人更容易做到这一点吗?老实说,我无法理解为什么还没有这样做,所以我猜它比我预期的要困难得多.
我假设如果我能得到一个具有合理性能特征的真正无头浏览器(我有一个大型服务器机队来解决这个问题,但它不足以用于真正的Firefox和GUI渲染)那么我将被设置.
我正在尝试将文档从html,txt转换为pdf,odt,反之亦然..但只有odt到pdf似乎工作..没有其他文件格式转换
这是我的命令
libreoffice --headless --convert-to pdf test.html [Not working]
libreoffice --headless --convert-to odt test.html [Not working]
libreoffice --headless --convert-to pdf test.docx [Not working]
libreoffice --headless --convert-to pdf test.odt [Working]
Run Code Online (Sandbox Code Playgroud) 如果我们有一个运行sikuli的无头测试服务器(需要ubuntu和windows配置),如何在没有物理监视器的情况下使其工作,并且最好是尽可能多的屏幕分辨率.
我正在为我正在进行的项目单元测试一些SWT和Swing代码,只要我从eclipse运行它们,测试运行正常.
一旦我在哈德森环境中运行它们就会失败,因为哈德森在无头模式下运行测试.
这样做的最佳方法是什么?仅请开源解决方案(因为该项目是开源的).
我想使用无头铬头进行硒的自动化测试.(https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md)
我确实已经在9222上运行了无头版本.所以如果我打开http://10.252.100.33:9222/json/我确实得到了
[ {
"description": "",
"devtoolsFrontendUrl": "/devtools/inspector.html?ws=127.0.0.1:9223/devtools/page/0261be06-1271-485b-bdff-48e443de7a91",
"id": "0261be06-1271-485b-bdff-48e443de7a91",
"title": "The Chromium Projects",
"type": "page",
"url": "https://www.chromium.org/",
"webSocketDebuggerUrl": "ws://127.0.0.1:9223/devtools/page/0261be06-1271-485b-bdff-48e443de7a91"
} ]
Run Code Online (Sandbox Code Playgroud)
作为下一步,我想将硒连接到无头铬上.但是,当我尝试
final DesiredCapabilities caps = DesiredCapabilities.chrome();
final WebDriver driver = new RemoteWebDriver(new URL("http://localhost:9222/json"), caps);
driver.get("http://www.google.com");
Run Code Online (Sandbox Code Playgroud)
我确实得到以下注销
Jän 24, 2017 7:14:45 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFORMATION: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end
Jän 24, 2017 7:14:45 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFORMATION: Falling back to original OSS JSON Wire Protocol.
Jän 24, …Run Code Online (Sandbox Code Playgroud) 当我们尝试获取 Clipboard 实例时。
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Run Code Online (Sandbox Code Playgroud)
我还尝试通过设置头部来运行 Spring Boot 应用程序。
SpringApplicationBuilder builder = new SpringApplicationBuilder(SpringBootApplication.class,args);
builder.headless(false).run(args);
Run Code Online (Sandbox Code Playgroud)
我们正在低于异常。
java.awt.HeadlessException
at sun.awt.HeadlessToolkit.getSystemClipboard(HeadlessToolkit.java:309)
at com.kpit.ecueditor.core.utils.ClipboardUtility.copyToClipboard(ClipboardUtility.java:57)
Run Code Online (Sandbox Code Playgroud)
有人可以建议我在这里缺少什么。
如果我在简单的 java 应用程序中运行相同的剪贴板代码,它可以正常工作,但不能在 Spring Boot 应用程序中运行。
我正在尝试在无头模式下使用Selenium 4.8.0 Python 客户端执行一个基本程序:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
options = Options()
options.headless = True
s = Service('C:\\BrowserDrivers\\chromedriver.exe')
driver = webdriver.Chrome(service=s, options=options)
driver.get('https://www.google.com/')
driver.quit()
Run Code Online (Sandbox Code Playgroud)
具有以下配置:
尽管程序成功执行,但出现 DeprecationWarning 似乎为:
DeprecationWarning: headless property is deprecated, instead use add_argument('--headless') or add_argument('--headless=new')
Run Code Online (Sandbox Code Playgroud)
谁能解释 DeprecationWarning 和所需的更改?
python selenium headless selenium-chromedriver selenium-webdriver
我最近在Red Hat Server上安装了Python 2.7,Robot Framework和Selenium Library(我仍然不知道我是否成功...),以便在Web应用程序上运行一些测试.
所以我尝试了一个使用Robot Framework的简单测试用例来查看Selenium Library是否正常运行,只是打开一个网页,仅此而已......
Selenium Server根据ps的结果启动并运行,Firefox二进制文件在PATH中...
从Robot Framework运行测试用例(使用pybot testcasename.tsv)我得到一个例外:
错误:将屏幕截图捕获到字符串时出现问题:java.awt.AWTException:无头环境
那么,无头环境是什么?有没有人知道是否还有其他东西需要安装或配置?
我们有一个Mac os服务器(10.10.3),我们用它来运行Jenkins的功能测试.
我们想(在我们的测试中)使用一个工具/库(sikulix作为信息),它使用了引擎java.awt.Robot类-java.awt.GraphicsEnvironment-.问题是:我们不能在无头环境中使用这个java类,因为它需要访问GUI.
所以我想知道是否有解决方案/黑客使这个工具与jenkins一起工作.
考虑到我们有一个USB-HDMI模拟器(mac无头加速器)模拟附加的显示器.
我们还安装了Xquartz,X11,xauth,所以我认为它会绕过这个java无头限制,强制将java.awt.headless属性设置为false,并使用X窗口,但事实并非如此.
如果我错了,请纠正我:我们不需要有真正的屏幕来做到这一点,这是显示模拟器/模拟器的目标; 不是吗?
我在我们的测试中成功尝试使用此lib:
在桌面上使用它(带监视器,它可以工作)
使用远程mac服务器 机器A和本地mac桌面 机器B之间的屏幕共享(通过执行此屏幕共享终端中的脚本)vnc?
在我的linux计算机(客户端)上使用ssh -Y,它也是X Window System(X11)应用程序的服务器:它在没有任何ssh配置更改(-Y标志)的情况下进行了X11转发.java.awt.headless = false在这里很有用
但我无法确定最后的解决方案是否有用.虽然我已经通过ssh执行了脚本,但我连接了一个屏幕:它可能会影响某些东西.
(请记住,最终目标是使用jenkins执行测试).
它引导我尝试:通过带有-Y标志的 ssh执行脚本,或者通过修改ssh_config/sshd_config文件(访问mac -remote服务器 - )并激活屏幕共享,但它不会自动识别X-window :(
在这里我的问题:
xvfb插件(jenkins)是否足以满足我们的需求?我不知道如何配置它.
是不是可以从mac服务器执行X11转发(用jenkins执行的脚本作为守护进程/代理;包括可能是ssh -Y连接,我还不知道如何让它工作)到共享的屏幕? - 这是服务器....不知道为什么它不能识别它 - .
是的,我知道,这个问题很奇怪,但我的大脑正在燃烧,我感到困惑......
顺便说一句,我宁愿做一切真无头,但如果不可能,我必须使用屏幕共享,我很好.
目前我真的很想知道是否有可能在无头环境中启动需要X11 -on mac的GUI应用程序...我认为正确的安装答案是肯定的,但显然它不是那么简单......或者我一定不能正确理解.
对于X11转发,我有$ DISPLAY var设置,但我仍然得到
错误:无法打开显示'地址'
即使我将显示设置为本地,远程或地址,我仍然被具有GUI访问权限的lib阻止.
另一个解决方案可能是附加终端会话(屏幕共享终端/终端启动脚本),我将在明天尝试使用tmux.我仍然觉得奇怪,服务器无法检测到它的共享会话(我想再说一遍!)....有一个打开的屏幕花花公子:s
使用xvfb:
export DISPLAY=:1
Xvfb :1 &
Run Code Online (Sandbox Code Playgroud)
然后mvn命令,但它仍然无法正常工作.
我使用Selenium开发了一些Python脚本,最初是PhantomJS.在转向自动下载的同时,我切换到(朝向)Firefox(已经工作),然后使用无头选项切换Chrome,因此我不会在我面前打开浏览器.
我的第一个脚本访问一个页面和几个HTML元素,与无头Chrome完美配合.
然而,第二个只适用于Chrome.如果我添加"无头"选项,它将不再起作用.当我尝试在无头模式下打印HTML以查看为什么它找不到我正在寻找的HTML元素时,我只有:
<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>
Run Code Online (Sandbox Code Playgroud)
使用标题Chrome,我有一个完整的HTML打印.这就是我开始无头Chrome的方式:
options = webdriver.ChromeOptions()
options.add_argument("--ignore-certificate-errors")
options.add_argument("headless")
driver = webdriver.Chrome(chrome_options=options)
Run Code Online (Sandbox Code Playgroud)
再次注意,这适用于我的另一个脚本.这里唯一的区别是我需要登录才能访问该页面,但即便如此,为什么它会与头部一起工作?填写表单,我的脚本无论如何都会自动登录.
Python:3.6.1,Chrome:60.0.3112.78(64位),Selenium:3.4.3
任何的想法 ?谢谢.
编辑:这是代码的开头
url = 'https://10.11.227.21/tmui/'
driver.get(url + "login.jsp")
html_source = driver.page_source
print(html_source)
blocStatus = WebDriverWait(driver, TIMEOUT).until(EC.presence_of_element_located((By.ID, "username")))
inputElement = driver.find_element_by_id("username")
inputElement.send_keys('actualLogin')
inputElement = driver.find_element_by_id("passwd")
inputElement.send_keys('actualPassword')
inputElement.submit()
Run Code Online (Sandbox Code Playgroud)