0

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

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

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

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

有没有一种方法可以让我在不知道他们的 ID 的情况下选择其余选项(因为他们的 ID 可以更改或名称可以更改)。我可以按索引移动和选择不同的选项吗?
即我的要求是下拉菜单中可以有 4 个选项或 5 个选项。我不在乎他们的名字,只要他们在“浏览”文本下。

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

1 回答 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"));

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

编辑

如果您只想使用类名的一部分来查找元素,xpath 是您的朋友:

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

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

于 2012-05-21T21:33:40.123 回答