首页 文章

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

提问于
浏览
0

我想选择并单击其中一个选项,当鼠标移动到网页上的文本或可见文本时,该选项会通过下拉列表显示 .

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

所以为了选择或点击“浏览”,我使用(在Selenium 2.21.0中):

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

有没有办法可以在不知道其ID的情况下选择其余选项(因为它们的ID可以更改或名称可以更改) . 我可以按索引移动并选择不同的选项吗?
我的要求是在下拉列表中可以有4个选项或5个选项 . 我不关心他们的名字,只要它们在"Browse"文本下 .

在html页面中,这些隐藏的选项在鼠标移动或在“浏览”中单击时变为可见,其类名称为:

ajs-drop-down hidden

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

这是HTML代码/页面:

<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>

1 回答

  • 1

    让我确定一下:将鼠标悬停在“浏览”链接后,<div class =“ajs-drop-down hidden”hidden =“”style =“”>下的项目变为可见,您希望使用索引转到它们任何名字?

    在这种情况下,我会做以下事情

    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

    WebElement exampleItem = driver.findElement(By.xpath(//div[@className='ajs-drop-down hidden'/ul/li[1]/a]));
    

    不过我推荐第一种方法 .

    现在,您在其他下拉菜单中提到了其他选项 . 所以我假设在上面的示例中找到合适的div并不是那么简单 . 如果是这种情况,我们需要首先使用链接(元素)id找到div .

    List<WebElemet> menuItems = driver.findElement(By.xpath("//a[@id='browse-menu-link']/../div")).findElements(By.tagName("a"));
    

    这应该产生与第一个例子相同的结果 .

    EDIT

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

    List<WebElemet> menuItems = driver.findElement(By.xpath("//*[contains(@class, 'hidden')]")).findElements(By.tagName("a"));
    

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

相关问题