创建一个 Selenium 模块来替换 testcomplete

Creating a Selenium module to replace testcomplete

我正在尝试用 Selenium 替换 TestComplete 以进行自动化测试,理想情况下无需重写所有不同的函数。

计划是复制用于在 TestComplete 中查找元素的别名结构,其中包含一个 python 模块,可以将其放入其中以查找 Web 元素。

我已经能够让它在单个页面上工作,但是由于 python 似乎是如何处理导入的,所以我到目前为止还无法找到除此之外的导入方法。

测试完成中的示例代码为。

Aliases.LoginPage.Username.SetText("username")

为了在 selenium 中复制它,我创建了一个名为 Aliases 的模块,其中有一个名为 LoginPage 的 class,包含一个名为 username 的 属性。

所以 Aliases.py 如下所示:

    from selenium import webdriver
    driver = webdriver.Chrome("C:\BrowserDrivers\chromedriver.exe")

    class LoginPage:
        _username = driver.find_element_by_id("txtUser")

        @property
        def user(self):
            return type(self)._user

并由以下人员调用:

    import Aliases

    login_page = Aliases.LoginPage()
    login_page.username.send_keys("username")

这仅适用于一页,但是如果我向此模块添加第二个 class 并使用另一页上元素的 find_element 代码,我会得到一个 "element not found exception"

调试显示这是因为 python 试图在导入别名模块时设置所有 class 属性,所以当然不在登录页面上的元素不会被发现。 即使我在要导入的别名模块中指定 class,也会发生这种情况。

有没有办法让我告诉 Python 只为导入的 class 设置属性 要么 我构建项目以复制在当前编码测试中找到元素的方式的另一种方法?

或者,我是不是以错误的方式处理这个问题,我应该开始修改当前的代码,我们必须是特定于 selenium 的?

我不知道你所说的变化的规模,但我的猜测是,重写测试比尝试编写代码更快(更好)进行更改。在长 运行 中,重写可能需要更少的维护并且更容易调试。因此,请花点时间正确地重写它们。大约一年前,当我们从 TestComplete/Javascript 切换到 Selenium/Java 时,我做了类似的事情。我必须学习 Java 并用 Selenium 重写所有内容,但最终我对变化感到非常满意。拥有强类型语言、更好的 IDE (Eclipse) 等等让我的工作效率大大提高,测试速度更快、更有弹性并且更易于维护和调试。