5

テストしようとしているページには、実際にはドロップダウン選択メニューとして機能しているスパン要素があります。「select」要素の Selenium コードが機能せず、次のメッセージがスローされます。

Exception in thread "main" org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "span"

その要素のコードは次のようになります。

<span style="width: 100%" val="30" id="countVal">30</span>

ドロップダウンメニューを開いたときのコードは次のとおりです。

<tr onclick="selectNewCount(1);" class="selec_option">
<td onmouseout="blankit(this)" onmouseover="colorit(this)" class="bones_pointer out_color" id="tdgroup1">50</td>
</tr>

これは次のようになります。

疑似 select 要素を持つフォーム

編集1:

これは私のSeleniumコードです:

            // choose number of records.
        try {
            WebDriverWait wait = new WebDriverWait(driver, /*seconds=*/10);

            element = wait.until(presenceOfElementLocated(By.id("countVal")));

            Select select = new Select(element);
            select.deselectAll();
            select.selectByVisibleText("100");

        } catch (NoSuchElementException ex) {
            System.out.println("PAGE SOURCE: \n" + driver.getPageSource());
            ex.printStackTrace();
        }

これは、ページのソース コードがこの要素をどのように見ているかを示しています。

ここに画像の説明を入力

必要に応じて詳細を追加できます。ありがとう。

4

4 に答える 4

4

だからここに何が起こっているのですか:

クリックすると<div id="countSelect"></div>JavaScriptshow_countSelector()が実行され、値がテーブルに追加されます。これらの「選択オプション」は、実際には「テーブル行」です。

したがって、手順は次のとおりです。1) idの下
にクラスの行がない場合は、最初にそれをクリックする必要があります。 2) その後、特定の行をクリックします。selec_optiondivcountSelectdiv

そこで、Java コードを表示してみます (ただし、Selenium には Python を使用しています)。

WebElement selectorElement = driver.find(By.xpath('//*[@id="countSelect"]')));

WebElement elementOfInterest;
try {
    //trying to get the "select option"
    elementOfInterest = selectorElement.findElement(By.xpath('//*[contains(@class,"selec_option")]/td[@text()="50"]'))

} catch (NoSuchElementException e) { 
    //so options are not visible, meaning we need to click first
    selectorElement.click()
    //good idea would be to put "wait for element" here
    elementOfInterest = selectorElement.findElement(By.xpath('//*[contains(@class,"selec_option")]/td[@text()="50"]'))
}
//this would select the option
elementOfInterest.click()

このようなもの。:)

于 2012-12-21T15:17:24.600 に答える
0

Select クラスは、html ネイティブ選択でのみ使用できます...実際にはスパンであるカスタム選択を使用します。

あなたの場合の例:

 public void selectValue(String item) {
    WebElement dropDown = driver.findElement(By.id("countTd"));
    dropDown.click();

    driver.findElement(By.xpath("//td[@id='countTd']/span[text()='" + item + "']")).click();
}
于 2012-12-21T14:58:42.533 に答える
0

それは、selectそう見えてもイベじゃないから…。

別の手段を使用する必要があります。シンプルだと思います

element = driver.find(By.id("countVal"));
element.click()

動作するはずです

選択が機能する方法を見つける必要があります。背後にいくつかのjavascriptが含まれている必要があります。要素の変化がどのように現れるかがわかると、Selenium で何をすべきかがわかります。しかし、それは確かに純粋ではありませんselect

(注:これはテストされておらず、コンパイルできないコードでもありますが、私がその点をどのように見ているかを示しています)

于 2012-12-21T10:07:26.527 に答える
0

試しました selectByValue("value")か?

于 2012-12-21T04:34:58.353 に答える