有没有办法在使用Selenium运行自动化测试用例时捕获浏览器日志?我发现了一篇关于如何在Selenium中捕获JavaScript错误的文章.但这仅适用于Firefox,仅适用于错误.我想得到所有的控制台日志.
我想构建一个自动化测试,所以我必须知道chrome控制台中出现的错误.
有一个选项来获取控制台中出现的错误行?
要查看控制台:右键单击页面中的某个位置,单击"检查元素",然后转到"控制台".
我正在尝试使用WebDriver谷歌测试自动化会议谈话和ChromeDriver "性能日志"文档页面来遵循网络性能测试中提出的想法,以获取我想要提交到网页测试以便稍后进行性能分析的跟踪数据.
如何使用python selenium绑定检索性能日志?
我试图log_types
在驱动程序实例中打印出来
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://stackoverflow.com')
print driver.log_types
driver.close()
Run Code Online (Sandbox Code Playgroud)
但只有
[u'browser', u'driver']
Run Code Online (Sandbox Code Playgroud)
而且我没有看到相关的命令行开关.
python selenium google-chrome selenium-chromedriver selenium-webdriver
我试图console.log
通过python Selenium API绑定从Firefox 获取网页的输出.根据Chrome的代码以及文档中的一些建议,我尝试了以下方法:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
d = DesiredCapabilities.FIREFOX
d['loggingPrefs'] = { 'browser':'ALL' }
fp = webdriver.FirefoxProfile()
fp.set_preference('webdriver.log.file', '/tmp/firefox_console')
driver = webdriver.Firefox(capabilities=d,firefox_profile=fp)
driver.set_window_size(1280,1024)
driver.get('http://foo.com')
try:
WebDriverWait(driver,10).until(lambda driver: driver.execute_script("return document.readyState") == "complete")
for entry in driver.get_log('browser'):
print entry
finally:
driver.quit()
Run Code Online (Sandbox Code Playgroud)
但是,即使是一个简单的调用示例页面console.log("foo")
,我也看不到"foo"
通过API或/tmp/firefox_console
文件返回的日志条目.难道我做错了什么?或者这是Selenium限制?
有没有办法在Selenium中访问服务器上的浏览器上的日志?例如,如果站点执行了一个console.log("Test.")
,Selenium测试用例是否可以访问该日志?任何帮助,将不胜感激!(最好是在Python中).
谢谢!
〜Carpetfizz
我正在使用Laravel 5.6和Laravel Dusk 3.0.9。
黄昏非常方便,但是当在具有某些Javascript功能的页面上测试失败时,很难找出问题所在。Dusk会生成一个屏幕截图,这很有帮助,但是我真正需要的是查看Javascript控制台的输出。
显然,这是可能的-Dusk tests/Browser/console
在安装过程中会创建一个目录,并且此PR建议JS控制台输出已记录,或者至少是可记录的。
尽管没有文档(我可以找到)有关如何实际执行操作。 浏览该PR中的差异时,我看到了一个新方法logConsole()
(后来storeConsoleLog()
在注释中重命名为@Jonas指出),但是我似乎无法使其执行任何操作,例如:
$browser->visit('/somewhere')
->select('#foo', '2')
->value('#date', '2018-07-29')
->storeConsoleLog('bar')
->assertEnabled('button[type=submit]');
Run Code Online (Sandbox Code Playgroud)
该测试失败,并生成了一个漂亮的屏幕截图,但是没有任何日志文件的迹象。我尝试过移动->storeConsoleLog('bar')
链条中的位置,例如第一个或最后一个,并在链条之前或之后作为单独的一行:
$browser->visit('/somewhere')
->...full chain here;
$browser->storeConsoleLog('bar');
Run Code Online (Sandbox Code Playgroud)
但是它们都没有任何区别。我的JS有一系列,console.log()
当在浏览器中测试自己时会用到这些,它们会确切告诉我出了什么问题。我期望此功能记录这些消息。
我是否误解了公关,这有可能吗?如果是这样,怎么办?
通过调试中的storeConsoleLog()
方法,vendor/laravel/dusk/src/Browser.php
我可以看到该方法已正确调用,但是没有控制台内容可记录。如果我手动重复测试在Chrome中执行的步骤,则会有行写入Chrome devtools控制台,实际上3是在页面加载时写入的。为什么黄昏看不到那些?
我发现,如果'--headless'
从中的driver()
方法中删除DuskTestCase
,则在测试期间将显示浏览器。然后,您可以显示该浏览器的开发工具,并在测试运行时实时观看控制台输出。太快了,无法真正发挥作用,如果出现错误,浏览器将关闭,并且无论如何您都会丢失控制台上的所有内容(除非有办法让浏览器在发生故障时保持打开状态?),但请在此处添加此内容,以防万一。对某人有用!
当我在一个javascript繁重的应用程序中工作时,我喜欢使用Console.log()来进行调试.但是,我想确保我已正确压缩生产中的所有控制台日志记录.
我想创建一个python脚本来遍历一个站点并生成一个向控制台写入内容的页面列表.我知道我可以在最小化之前翻录javascript文件并搜索"Console.Log",但我经常是项目的分析师,因此无法访问代码库.我们还有很多网站一段时间没有被触及,但可以使用扫描(伟大的实习项目:-)).
这对python有用吗?
selenium ×5
python ×4
javascript ×2
asp.net-mvc ×1
c# ×1
firefox ×1
java ×1
laravel ×1
laravel-5.6 ×1
laravel-dusk ×1
logging ×1
unit-testing ×1