将Selenium脚本转换为可执行文件并远程运行会返回不一致的结果

时间:2014-08-06 08:16:32

标签: python selenium selenium-webdriver remote-access

我正在尝试运行我使用Python绑定创建的Selenium脚本作为远程无头机器上的可执行文件。问题是远程执行时脚本的行为会有所不同。

我已完成以下步骤:

  1. 创建了一个Selenium脚本( with Python bindings ),可以在我的本地虚拟机上完美运行。
  2. 使用py2exe将上述脚本转换为独立的可执行文件。这个也可以在我的本地机器上运行。
  3. 在远程VM上运行创建的独立可执行文件,该虚拟机与我正在开发的虚拟机完全相似,并在(步骤1)中测试初始脚本。唯一的区别是它无头。对于远程运行,我使用来自PSTools实用程序集的PsExec。我按以下方式运行它:

    PsExec.exe \ vmcle001iso -u rhdwa \ he119712a -p Password123 -h c:\ dist \ test.exe

  4. 这是我的问题开始的时候。首先我提到一些Python命令停止工作。例如,通常的Pythin exit(0)返回错误:

    Traceback (most recent call last):
      File "nacs.py", line 103, in <module>
    NameError: name 'exit' is not defined
    

    但是我的主要问题是某些元素无法找到或与之交互。因此,之前完美运行的某些按钮会返回Selenium,例如:

    WebDriverException: Message: u'unknown error: Element is not clickable at point (960, 23). Other element would receive the click:
    

    所以再次强调一下,这一切都发生在我远程运行可执行文件时。大多数代码都按预期工作。

    非常欢迎任何可能导致此类行为的提示。

1 个答案:

答案 0 :(得分:0)

我觉得这些信息最好包含在评论中,但我还没有这些特权,所以这就是我到目前为止所发现的。

我发现this link谈到exit函数 - 本质上,不建议不在主解释器中运行的脚本,因为启动时没有加载很多模块,导致它不被定义。 (所以它似乎并不总是内置,正如你所想的那样)

就第二条错误消息而言,似乎你的代码正在加载一些比以前更快/更慢的东西,所以它在加载某个元素之前达到某些点 - 如果我不得不猜测会导致什么, driver.sleep()命令的时间可能太短了。但是,我建议不要手动更改这些时间,而是插入WebDriverWaits(这是您可以单击的链接)以确保该元素在此时可单击。如果等待不起作用并且超时,那么它也可能会受到影响。

请尽可能更新您的帖子,以便我们提供更多相关信息。