2017-03-22 88 views
0

我需要浏览菜单并选择一个子菜单。使用Robot Framework选择子菜单

我使用点击元素的XPath如下:

//*[@id="gomenu68e1884541"]//nav/div/ul/li[3]/div/ul/li[2]/a 

但它并不能帮助我,因为iddynamic和变化,每一次,当我访问应用程序

我怎样才能浏览一个菜单 - >子菜单

欲了解更多详情,请参考下面提到的图片。

code html

谁能帮助?

+2

你能张贴您的资产净值的HTML? – Goralight

+2

>如何浏览菜单>子菜单?通过不使用动态ID-S,直接派生路径和索引元素:)。即不要拿什么xpath浏览器为你生成:)在问题中提供html源代码,或者链接到公开可见的系统,我们会帮助你。 – Todor

回答

0

我对Xpath有同样的问题。 js,迷惑angular等基于网站,这是生成的内容dinamically根本不工作。我花了很多时间在我以前的自动化项目上,为此找到了一个解决方案:构建自己的xpath。不仅意味着Insect ElementChrome和其他浏览器中,你必须自己构建它们,同时学习代码和网站的工作方式。这个方法应该遵循:

  • 熟悉前端客户端的代码
  • 学习xpath
  • 建立自己的XPath

你必须找出你如何能达到想要的元素,而不使用@id s。使用css classes这是很少随机改变,并找出你的元素之间的关系。您必须使用following-siblingtext()以及其他不太知名的xpath选择器。我会建议你this 熟悉xpath。对我来说没有任何其他的方式,但最终我有一个了不起的,格式良好的变量文件,包含了所有元素的xpath。

+1

必须同意,除此之外别无他法,只能去学习。 Xpath是其他任何语言的子集,甚至非常简单直接,我们在selenium/webdriver中使用的是大多数情况下的基本集合。我无法想象在没有编程语言知识的情况下编程。 w3c是明确的资源,但是也可以从w3school教程开始。对于上帝的爱,千万不要使用浏览器性别化的xpath/css :) – Todor

-1

在这种情况下,菜单项(li元素)是具有特定类别的div的孙子,以及ul的子元素。如果你的a后去的XPath的是:

//div[@class="menuslide”]/ul/li/a[@title="Alumnos"] 

如果目标元素应该是li,您可以使用此XPath - 它选择li具有带标题的孩子:

//div[@class="menuslide”]/ul/li[a[@title="Alumnos"]] 

如果你想它的任何未来的变化较为强劲,但速度较慢一点点,你可以跳过uldiv之间的父子关系,以及它和li,并使其只是“找我有一个li元素祖先与类“一div

//div[@class="menuslide”]//li/a[@title="Alumnos"] 

而这个创造的XPath的一般模式 - 你会发现一个共同的属性模式,将留(类和标题属性),而只会查明评估路径具体元素,考虑到评估速度和鲁棒性之间的权衡(速度是一个问题与现代浏览器和硬件的更少)

+0

感谢您的回答。有可能我无法找到该对象,因为它在出现响应时被mobile_menu复制出来了。 如果是这样,我该如何识别重复的项目?由索引?我不知道... – Marta79

+0

如果有多个元素匹配,xpath将返回所有这些元素 - 这就是你会看到更多元素的方式。这是你目前的问题,元素没有找到? @ Marta79 – Todor

+0

谢谢Todor,我想我已经开始明白发生了什么。我可以访问一级菜单元素,但不能访问下拉菜单的第二级和第三级。我有这个错误>消息:元素不可见。我尝试过“等到页面包含元素”,找到包含悬停子菜单的类,但没有运气。有什么建议么? – Marta79

1

我终于得到它的工作(甚至在第三级菜单的)使用这些命令:

Wait Until Page Contains Element 
Sleep 
Mouse Over 
Click Link 

而且不同的XPath的混合:

xpath=//*[@class="dropdown"]//a[contains(., 'Alumnos')] 
xpath=//*[@class="dropdown"]/li[3]/div/ul/li[1]/div/ul/li[1]/a 

谢谢大家对你的帮助