首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium 2和Junit 4测试用例:从具有多个类名的下拉框中选择选项

Selenium 2和Junit 4测试用例:从具有多个类名的下拉框中选择选项
EN

Stack Overflow用户
提问于 2012-05-21 11:05:12
回答 1查看 2.5K关注 0票数 0

当鼠标移动到网页上的文本或可见文本时,我想选择并单击其中一个选项,当鼠标移动到网页上的文本或可见文本时,它通过下拉列表变得可见。

因此,基本上,我移动鼠标在下面的html页面中的文本“浏览”,然后我得到一个不同的选项,如“页面”,“博客”。

因此,为了选择或单击"Browse“,我使用(在Selenium 2.21.0中):

driver.findElement(By.xpath("//a[@id='browse-menu-link']/span")).click()

是否有一种方法,我可以选择其余的选项,而不知道他们的ids (因为他们的ids可以改变或名称可以改变)。是否可以按索引移动和选择不同的选项?

也就是说,我的要求是在下拉列表中可以有4个选项或5个选项,只要它们在“浏览”文本下,我就不关心它们的名称。

在html页面中,当鼠标移动或单击"Browse“时,这些隐藏选项的类名为:

代码语言:javascript
复制
ajs-drop-down hidden

在具有相同类名的其他下拉列表中还有其他隐藏选项,因此按类名选择元素会导致错误。

以下是HTML代码/页面:

代码语言:javascript
复制
<head>
<body id="com-test" class="" onload="placeFocus()">
<div id="full-height-container">
<fieldset class="hidden parameters">
<fieldset class="hidden parameters">
<div id="header" class="">
<form id="quick-search" class="quick-search" action="/dosearchsite.action"     method="get">
<fieldset>
<legend>Quick Search</legend>
<input id="quick-search-query" class="quick-search-query placeholded" type="text"   size="25" name="queryString" autocomplete="off" accesskey="q">
<input id="quick-search-submit" class="quick-search-submit" type="submit"   value="Search">
<div class="aui-dd-parent quick-nav-drop-down"></div>
</fieldset>
<fieldset class="hidden parameters">
<input id="quickNavEnabled" type="hidden" value="true">
</fieldset>
</form >
<ul id="header-menu-bar" class="ajs-menu-bar">
<li class="normal ajs-menu-item">
<a id="browse-menu-link" class="browse trigger ajs-menu-title" href="#">
<span>
**<span>Browse</span>**
</span>
</a>
<div class="ajs-drop-down hidden" hidden="" style="">
<ul id="browse-menu-link-leading" class="section-leading first">
<li class="">
<a id="space-pages-link" class="" title="Attachments: 5" href="/pages/listpages.action?   key=UNI">
**<span>Pages</span>**
</a>
</li>
<li class="">
<a id="space-blogposts-link" class="" title="Attachments: 5"   href="/pages/viewrecentblogposts.action?key=UNI">
**<span>Blog</span>**
</a>
EN

回答 1

Stack Overflow用户

发布于 2012-05-21 21:33:40

让我确定一下:在鼠标悬停在“浏览”上之后,将< div class=下的项目链接起来,然后下拉隐藏的“hidden="”style=“>>变成可见的,您想使用索引而不是任何名称来找到它们吗?

在这种情况下,我将执行以下操作

代码语言:javascript
复制
List<WebElemet> menuItems = driver.findElement(By.xpath("//*[@class='ajs-drop-down hidden']")).findElements(By.tagName("a"));
WebElement exampleItem = menuItems.get(1); //getting 2nd menu item

您还可以使用一些丑陋的xpath。

代码语言:javascript
复制
WebElement exampleItem = driver.findElement(By.xpath(//div[@className='ajs-drop-down hidden'/ul/li[1]/a]));

不过,我推荐第一种方法。

现在,你提到了在其他下跌下的其他选择。因此,我假设在上面的例子中找到适当的div并不是那么简单。如果是这样的话,我们需要首先使用link的(一个元素) id来定位div。

代码语言:javascript
复制
List<WebElemet> menuItems = driver.findElement(By.xpath("//a[@id='browse-menu-link']/../div")).findElements(By.tagName("a"));

这将产生与第一个示例相同的结果。

编辑

如果您希望只使用类名的一部分找到一个元素,那么xpath是您的朋友:

代码语言:javascript
复制
List<WebElemet> menuItems = driver.findElement(By.xpath("//*[contains(@class, 'hidden')]")).findElements(By.tagName("a"));

driver.findElement将返回满足指定条件的第一个元素。如果您想获得第二或第三,只需使用findElement*s*并从列表中获取元素(如上面的第一个示例)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10684041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档