0

マウスが Web ページのテキストまたは表示されているテキストに移動すると、ドロップダウン リストから表示されるオプションの 1 つを選択してクリックしたいと考えていました。

したがって、基本的には、マウスを下の 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は、指定された条件を満たす最初の要素を返します。2番目または3番目を取得する場合は、findElement * s *を使用して、リストから要素を取得します(上記の最初の例のように)

于 2012-05-21T21:33:40.123 に答える