Selenium测试在命令行上运行但不通过任务计划程序运行

时间:2015-12-17 20:34:16

标签: python selenium selenium-webdriver windows-server-2012 taskscheduler

我有一个python Selenium测试,用Firebug和Netexport打开firefox,登录到网页并等待重定向链中的最后一页加载。当我在Windows命令行上运行时,此测试运行完全正常,但是当我尝试从任务计划程序运行它时,9/10次它无法找到Firefox配置文件。时不时地测试按预期工作。

我对Task Scheduler的怪癖不是很熟悉,所以这种行为对我没有意义。

该任务未被隐藏,我现在将其设置为仅在登录时运行。它配置为在Windows Server 2012上运行,这是VM正在运行的。

非常感谢有关此问题的任何知识。以下是我认为相关的代码,但如果它不够,请告诉我。

profile = webdriver.FirefoxProfile('path/to/default/profile')
# set up extensions/preferences
...
driver = webdriver.Firefox(firefox_profile=profile)
driver.get(<URL>)
# send_keys and other interactions
...

我还尝试过不指定配置文件位置,让selenium创建临时配置文件。相同的结果。

错误讯息:

当Firefox打开时,我得到了

  

无法加载您的Firefox个人资料。它可能缺失或无法访问。

硒的例外是

  

WebDriverException:消息:无法加载配置文件。个人资料目录:%s

关于检查日志文件(不存在)的内容

1 个答案:

答案 0 :(得分:0)

在源代码中进行一些调试/更多调试后,我找到了根本原因和解决方案。

  • 指定Firefox配置文件目录只会告诉selenium从哪里复制现有配置文件。它仍然会创建一个临时配置文件。
  • 临时配置文件在任务的运行目录中创建。在我的情况下,我是从脚本的目录在命令行中运行脚本,但是在Server 2008中启动的任务计划程序默认情况下从C:\ Windows \ System32运行脚本
  • 我在任务的操作
  • 中的“开始时间”选项中指定了运行目录

我仍然觉得很奇怪,虽然运行任务的用户是管理员,但似乎无法从System32读取配置文件(如@SiKing所怀疑)。更改着陆位置解决了问题。