如何使用 Google App Engine 运行 Selenium 测试?

How do I run Selenium tests with Google App Engine?

我们想使用 Google App Engine 运行 Selenium 每 4 小时使用 cron 进行一次测试(稍后我们可能会更改此小时数)。我们希望收到一封包含测试结果的电子邮件。我想知道如何创建第一个测试。我想测试 https://inbox.google.com/ with our extension with Google Chrome - enter our website, login, click "Save changes", install the extension, then enter https://inbox.google.com/, login and check that the extension works. The problem is that I don't know how to setup the tests, do I have to setup them with a URL and how do I do it? Do I have to give each test a different URL or can I run all the tests with one URL? Here is the code I received from http://app.crossbrowsertesting.com/selenium/run:

# Please visit http://selenium-python.readthedocs.org/en/latest/index.html for detailed installation and instructions

import unittest
from selenium import webdriver

class SeleniumCBT(unittest.TestCase):
    def setUp(self):
        caps = {}

        caps['name'] = 'Chrome Inbox Test'
        caps['build'] = '1.0'
        caps['browser_api_name'] = 'Chrome39x64'
        caps['os_api_name'] = 'Win8.1'
        caps['screen_resolution'] = '1280x1024'
        caps['record_video'] = 'true'
        caps['record_network'] = 'true'
        caps['record_snapshot'] = 'true'

        #start the remote browser on our server
        self.driver = webdriver.Remote(
            desired_capabilities=caps,
            command_executor="http://[username]:[password]@hub.crossbrowsertesting.com:80/wd/hub"
        )

        self.driver.implicitly_wait(20)

    def test_CBT(self):

        #load the page url
        print('Loading Url')
        self.driver.get('http://crossbrowsertesting.github.io/selenium_example_page.html')

        #maximize the window
        print('Maximizing window')
        self.driver.maximize_window()

        #check the title
        print('Checking title')
        self.assertTrue("Selenium Test Example Page" in self.driver.title)

    def tearDown(self):
        print("Done with session %s" % self.driver.session_id)
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

我还下载了 Selenium (2.44.0) 并将其放在 libs 目录中,如果我包含以下行:

import sys
sys.path.insert(0, 'libs')

我可以导入硒吗? (from selenium import webdriver) 还是我必须做其他事情?

我们正在使用 Python 2.7(尽管我们可以升级到 Python 3)。

Selenium 可让您控制(又名自动化)浏览器——而且,在 App Engine 实例上,您不 浏览器,也不能安装。

App Engine 是一个供您编写(服务器端)Web 应用程序的平台 (PaaS -- "platform as a service"),不是 运行 web 客户端 例如浏览器。

相反,您应该查看 基础架构 即服务 (IaaS) 产品:例如,在 that 字段中,Google 有 "Google Compute Engine" 和使用容器 (docker) 在其之上构建的层。

补充:除了几个 .so 显然只需要驱动 firefox 之外,selenium webdriver python 语言绑定似乎是纯粹的 Python -- 如果Selenium 的使用严格限于 webdriver.Remote 来驱动远程 Selenium 服务器,例如 app.crossbrowsertesting.com/selenium/run ,正如 OP 在评论中指出的那样,它是 可能的 将批次解压缩到应用程序主目录的子目录中将允许您在 GAE 上执行此操作。

我说 "possible",而不是 "certain",因为我无法确认 selenium 远程协议在这些源中的实现方式是否与 App 提供的套接字功能子集兼容引擎.

通过代码检查确定是否是这种情况比简单的试错法要花费更长的时间——因此,由于 "trial" 部分不会破坏任何东西(即使在最坏的情况下,它只会以异常终止),我会完全推荐(并让我们都知道!)。

至于其他问题,如果 selenium 确实有效,则将应用程序的单个 URL 交给处理程序,如果 OP 总是想要 运行 所有测试一起进行(绝不仅仅是其中的一个子集)——那部分一点也不难。可能中断的部分(并且可能以无法修复的方式中断,具体取决于 selenium 远程协议的编码方式的细节)是前一个部分 - 归结为能够使用 selenium 执行 "hello world"远程网络驱动程序。并确定,正如我所说,反复试验是最可行的方法。