创建一个 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) 等等让我的工作效率大大提高,测试速度更快、更有弹性并且更易于维护和调试。
我正在尝试用 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) 等等让我的工作效率大大提高,测试速度更快、更有弹性并且更易于维护和调试。