量角器和虚拟机:在下拉菜单准备好之前测试下拉菜单项的点击次数

时间:2016-03-08 13:33:12

标签: drop-down-menu protractor windows-server-2012-r2

情况如下:

我在两个不同的平台上运行测试:我的个人计算机(Windows 10)和虚拟机(Windows Server 2012 r2)。

我的测试在我的电脑上运行良好。然而,在我的VM上,只有一件事失败了。有时,当测试点击下拉菜单中的“注销”链接时,测试认为它已点击它但没有任何反应。所以测试无限期地等待主页......

我的问题是:是否可以强制量角器

  • 将鼠标悬停在下拉菜单上,
  • 等待一些自定义时间,
  • 点击所需的项目?

重要说明(不要犹豫要求澄清):

  • 其他下拉菜单不会导致该问题。在与我的团队讨论后,这个特定的下拉菜单可以比其他菜单更快地加载其元素。因此,有可能在图形卡呈现之前加载下拉菜单,然后测试点击其项目,但图形卡尚未呈现该项目。测试会认为一切正常,但什么也没发生。
  • 但是,浏览器作为后台进程运行:
    以前我的测试随机在VM上崩溃,我问了帮助。我收到了一个建议在无头浏览器上进行测试的答案 我没有找到在Windows Server上直接运行无头浏览器的正确方法(所有建议似乎都暗示了很多配置,比如安装Unix VM)。相反,我找到了一个名为Nircmd的命令行工具。除此之外,它允许隐藏窗口,即我可以编写一个命令,使进程在后台运行而不是可见。现在我的测试运行正常,但特定的下拉菜单除外。
  • 如果查看我的代码,您会看到我明确等待某些操作。这是因为我测试的应用程序正在使用超时强制我设置browser.ignoreSynchronization = true;

以下是我使用的代码:

var AtlasLogout = function () {
var localLogoutLink = atlasPage.logOutLink;
browser.wait(EC.presenceOf(localLogoutLink.getElement()))
.then(function () {
    localLogoutLink.clickOnDropDownMenuItem();
})
.then(function () {
    console.log("Clicked on logout");
})
return browser.wait(EC.visibilityOf(element(by.xpath('//input[@value="Login"]')), PAGE_WAITING_TIME));

getElement 函数使用外部文件中定义的方法(css,xpath或其他)返回ElementFinder,其中定义了所有页面元素。

localLogoutLink 是自定义类型 dropDownMenuItem 的对象。此类型具有自定义方法,例如 clickOnDropDownMenuItem dropDownMenuItem 的定义如下:

var dropDownMenuItem = function (dropdownMenu, item) {
var self = this;
self.item = item;
self.dropdownMenu = dropdownMenu;

self.clickOnDropDownMenuItem = function () {
    browser.actions().mouseMove(self.dropdownMenu.getElement()).click(self.item.getElement()).perform();
}
};

0 个答案:

没有答案