3

私は以下のようなhtmlコードを持っています。

<div class="rowElem fullSize ">
<div class="jqTransformSelectWrapper" style="z-index: 10; width: 276px;">
<div>
<span style="width: 245px;">MasterCard</span>
<a class="jqTransformSelectOpen" href="#"/>
</div>
<ul style="width: 274px; display: none; visibility: visible; height: 100px; overflow: hidden;">
<li><a class="selected" index="0" href="#">MasterCard</a></li>
<li><li><li>
</ul>
<select id="CardProvider" class="jqTransformHidden" name="CardKey" style="">
<option value="1">MasterCard</option>
<option value="2">VISA</option>
<option value="3">AMEX</option>
<option value="4">DEBIT</option>
</select>
</div>
</div>

ここで、これは// div / div/divに1つのフィールドのみが表示されるドロップダウンメニューです。// div / div / ulには、selectタグと同じプロバイダー入力を持つ4つの個別のliがあります。

ドロップダウンから特定の値を選択するために、多くの組み合わせを試してみました。

FindElementで//div/ div [@select [id = "CardProvider"]を使用すると、最初の値が返されます。

// div / div / [@ select [id] "cardProvider"] / ul//aを使用すると-4つの値が返されます。

しかし、私は期待されたタグ選択としてメニューを選択することができませんが、divでした。タグ名をselectにするクエリを作成すると、テキスト値がnullとして返されます。

何も機能せず、参照用のhtmlを指定したため、セレンコマンドを指定しませんでした。これを克服するためのご意見をお聞かせください。

4

8 に答える 8

2

相対xpathを回避できる場合は、それらを回避してみてください。HTMLでは、select要素に一意の識別子であるidがあり、これを使用できます。

以下を試すことができます:

Select sel = new Select(driver.findElementById("CardProvider"));
sel.selectByVisibleText - there are options here to select by index, visible text and value - choose any which you think would be stable.

詳細については、これを参照できます。

于 2012-11-22T05:15:37.710 に答える
0

率直に言って、私はcssセレクターを使用することを好みます。 最初のアプローチ:

String cssSelect="select[id='CardProvider']";
String cssMasterCard="select[id='CardProvider']>option[value='1']";
String cssVISA="select[id='CardProvider']>option[value='2']";

driver.findElement(By.cssSelector(cssSelect)).click();
driver.manage().timeouts().implicitlyWait(2,TimeUnit.SECONDS);
//clicking on e.g. MasterCard option
driver.findElement(By.cssSelector(cssMasterCard)).click();

2番目のアプローチ: jQueryがサポートされている場合は、以前にメニューのドロップダウンをクリックしなくても、メニューオプションを直接クリックできます。

JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x=$(\'"+cssMasterCard+"\');");
        stringBuilder.append("x.click();");
        js.executeScript(stringBuilder.toString());

DOMモデルを使用した3番目のアプローチクリック:

JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("document.getElementsByTagName('option')[0].click()");
        js.executeScript(stringBuilder.toString());

そして、firebugで見つかったxPathsまたはcssセレクター、firefoxのfirebugアドオンを確認することを忘れないでください:

ここに画像の説明を入力してください

これがお役に立てば幸いです。

于 2012-11-22T14:36:45.660 に答える
0

2つのxpathを使用してそれを見つけるという別のアプローチ(一種の回避策)に従いましたが、正常に機能します。

私が使用したコードは

Driver.FindElement(By.XPath(XPATH1ofCSSDROPDOWN)).Click();
            Driver.Wait(3000); 
            Driver.FindElement(By.XPath(XPATH2ofDROPDOWNLISTELEMENT)).Click();

ここで、XPATH2ofDROPDOWNLISTELEMENT = // * [@ id ='frmForm'] // a [contains(text()、'MasterCard')]

ボードに記載されている以外の回答がありましたらお知らせください。

于 2012-11-22T14:41:47.107 に答える
0

以下のソリューションは、選択せずにドロップダウンを実装した場合に最適に機能します

  1. ドロップダウンアイコンをクリックします
  2. リストが読み込まれるのを待つ
  3. 今リストに取り組んでいます

driver.findElements(By.xpath( "// div [@ class ='dropdown-menu'] / div [@ class ='dropdown-menu-item']"))。get(0).getText()。equals ("オプション1")

これをすべてのメニュー項目に対してループさせる必要があり、問題なく機能します。

于 2016-09-30T13:08:02.433 に答える
0
  1. アイコンをクリックします
  2. 要素のリストはSeleniumに公開されます
  3. それらの1つを選んでください

私は自分のコードで同様の問題に直面し、上記の手順で修正されました。

于 2017-01-18T10:12:07.157 に答える
0
String cssSelect="select[class='filerTableSelect']";
    String cssBetween="select[class='filerTableSelect']>option[value='BETWEEN']";
    driver.findElement(By.cssSelector(cssSelect)).click();
    driver.findElement(By.cssSelector(cssBetween)).click();

魅力のように働いた

于 2017-02-01T06:03:59.997 に答える
0

まず、次のことを確認します。UI/フロントエンドのドロップダウンが「選択」メソッドを使用しているかどうか。そうでない場合は、ドロップダウンをクリックして値を選択する以下のスニペットを使用してください。

WebElement selectMyElement = driver.findElement(this.getObject(By.Id( "Id of Your DropDown"))); selectMyElement.click();

        Actions keyDown = new Actions(driver);
        keyDown.sendKeys(Keys.chord(Keys.DOWN, Keys.DOWN)).perform();
于 2017-08-04T09:58:13.167 に答える
-1

あなたはこれを試すことができます:

IWebElement dropDownListBox = driver.findElement(By.Id("CardProvider"));
SelectElement clickThis = new SelectElement(dropDownListBox);
clickThis.SelectByText("MasterCard");
clickThis.SelectByText("VISA");
clickThis.SelectByText("AMEX");
clickThis.SelectByText("DEBIT");
于 2012-11-22T06:06:11.503 に答える