Protractor 使用量角器选择导航菜单项

Protractor 使用量角器选择导航菜单项,protractor,angularjs-e2e,Protractor,Angularjs E2e,我在启动某些菜单项时遇到了一些问题。 下面的菜单DOM包含以下项: 上传 报告 下载 管理员 下面是菜单结构的DOM示例: 平衡板 要从数组中获取第一个元素,需要使用第一个方法。但元素返回单个元素,您应该使用element.all返回ElementArrayFinder,然后可以首先应用 与使用cssContaingText不同,我更喜欢在菜单中创建一些层次结构,然后在每个层次中漫游 还有,你为什么决定等一等呢?默认情况下,量角器正在等待,我不明白在这种情况下为什么要使用browser.sle

我在启动某些菜单项时遇到了一些问题。 下面的菜单DOM包含以下项:

上传 报告 下载 管理员

下面是菜单结构的DOM示例:

平衡板
要从数组中获取第一个元素,需要使用第一个方法。但元素返回单个元素,您应该使用element.all返回ElementArrayFinder,然后可以首先应用

与使用cssContaingText不同,我更喜欢在菜单中创建一些层次结构,然后在每个层次中漫游

还有,你为什么决定等一等呢?默认情况下,量角器正在等待,我不明白在这种情况下为什么要使用browser.sleep。大多数事情你可以通过改变而实现,然后承诺

能否指定要单击的元素

编辑:


另外,rmLink类中没有这样的元素,并且包含文本。我认为您应该查找rmText

要从数组中获取第一个元素,需要使用第一个方法。但元素返回单个元素,您应该使用element.all返回ElementArrayFinder,然后可以首先应用

与使用cssContaingText不同,我更喜欢在菜单中创建一些层次结构,然后在每个层次中漫游

还有,你为什么决定等一等呢?默认情况下,量角器正在等待,我不明白在这种情况下为什么要使用browser.sleep。大多数事情你可以通过改变而实现,然后承诺

能否指定要单击的元素

编辑:


另外,rmLink类中没有这样的元素,并且包含文本。我认为您应该查找rmText

由于在这个环境中我们遇到了很多穿越DOM的障碍,我们决定使用browser.actions和“cssByText”的组合

这并不理想,但确实有效

例如,这将完成进入所需角度页面所需的菜单点击供参考:导航菜单不是角度应用程序;只有最终登录页是Angular应用程序在iframe元素中加载的位置

var sel='RadMenu1>ul>li:n-child3';//顶级菜单 var elem=elementby.csssel; elem.click.then函数{ var elem2=elementby.csssel; browser.sleep2000; //打开子菜单 浏览器操作 .mouseMoveelem2,{x:25,y:50}//相对于elem2左上角的偏移 点击 表演 .Then函数{ browser.sleep1000; 浏览器操作 .mouseMove{x:150,y:20}//打开下一个菜单选项 点击 表演 .Then函数{ var elem=elementby.cssContainingText'.rmText','要单击的菜单项'; 元素单击; }; }; };
} 由于在这种环境中,我们遇到了很多穿越DOM的障碍,因此我们决定使用browser.actions和“cssByText”的组合

这并不理想,但确实有效

例如,这将完成进入所需角度页面所需的菜单点击供参考:导航菜单不是角度应用程序;只有最终登录页是Angular应用程序在iframe元素中加载的位置

var sel='RadMenu1>ul>li:n-child3';//顶级菜单 var elem=elementby.csssel; elem.click.then函数{ var elem2=elementby.csssel; browser.sleep2000; //打开子菜单 浏览器操作 .mouseMoveelem2,{x:25,y:50}//相对于elem2左上角的偏移 点击 表演 .Then函数{ browser.sleep1000; 浏览器操作 .mouseMove{x:150,y:20}//打开下一个菜单选项 点击 表演 .Then函数{ var elem=elementby.cssContainingText'.rmText','要单击的菜单项'; 元素单击; }; }; };
}我说的不是改变HTML中的结构,而是在量角器代码/pageObject.var levels=element.allby.css'.rmLevel1>.rmItem'中创建等价的;var levelOne=levels.get0;levelOne.elementby.css'.rmExpand>.rmText'。单击//它将被提交请查看我修订的帖子。@alecxe-一如既往地感谢您的建议。我不是说更改HTML中的结构,而是说在量角器代码/pageObject.var levels=element.allby.css'.rmLevel1>.rmItem'中创建等效项;var levelOne=levels.get0;levelOne.elementby.css'.rmExpand>.rmText'。单击//它将被提交。请查看我修订的帖子。@alecxe-一如既往地感谢您的建议。