3

RubyとSeleniumWebDriverを使用してWebページの自動化を作成していますが、標準のHTMLではなくJavaScriptを使用して作成されたサイトのドロップダウンの一部でブロッキングの問題が発生しました。これらのドロップダウンでは、ユーザーはドロップダウンからオプションを選択するか、それをクリックして入力を開始し、入力内容に基づいて結果をフィルタリングできます(これらのドロップダウンは潜在的に非常に長いリスト用であると思いますオプション)。

問題は、以下のコードを使用してSelenium IDEで動作させることができたにもかかわらず、WebDriverを使用してそれらと対話する方法を理解できないことですが、このIDEスクリプトをRubyにエクスポートしても機能しません。

<tr>
    <td>select</td>
    <td>css=select[name=dsref]</td>
    <td>demo</td>
</tr>

私が使用しているWebDriverコードは次のとおりです。

def clickOn (parameters = {})
      # This will accept a locator type and name to click on
      #
      # EXAMPLE
      #
      # clickOn(
      #   locatorType: :link,
      #   locatorName: 'Home'
      # )
      #
      # This will click on the link named 'Home'
      locatorType = parameters[:locatorType]
      locatorName = parameters[:locatorName]
      $driver.find_element(locatorType, locatorName).click
    end

    clickOn(
          locatorType: :xpath,
          locatorName:     '/html/body/form/fieldset[4]/div[2]/div/div/div/a/span'
      )

次に、非表示の値フィールドのxpathを使用して同じ方法でドロップダウンから選択範囲を見つけようとしましたが、非表示の値を見つけることができません。

私が操作しようとしているJavaScriptは次のとおりです。

<div id="tabWarehousing" class="cansee">
<div class="lineFirst">
<div class="of8">
    <label for="formdsref">Warehouse</label>
    <br>
    <select id="sel2DZ" class="admn_dropdownmenu chzn-done" size="1" name="dsref"     style="display: none;">
        chosen=Chosen { form_field=select#sel2DZ.admn_dropdownmenu, options= {...}, active_field=

        true

        , more...}

        <option selected="" value=""></option>
        <option value="demo">demo</option>
        <option value="demodownload">demo download</option>
    </select>
    <div id="sel2DZ_chzn" class="chzn-container chzn-container-single chzn-container-single-  nosearch" style="width: 115px;">
        <a class="chzn-single" tabindex="-1" href="javascript:void(0)"> <span>demo</span>
        <div>
            <b></b>
        </div>
        </a>
        <div class="chzn-drop" style="left: -9000px; width: 113px; top: 18px;">
            <div class="chzn-search">
                <input type="text" autocomplete="off" style="width: 78px;">
            </div>
            <ul class="chzn-results">
                <li id="sel2DZ_chzn_o_1" class="active-result result-selected" style="">demo</li>
                <li id="sel2DZ_chzn_o_2" class="active-result" style="">demo download</li>
            </ul>
        </div>
    </div>
</div>

Ruby WebDriverを使用してこのドロップダウンの値を設定する方法についてのアイデアはありますか?

4

4 に答える 4

0

これは、ルビーを使用してドロップダウンを操作する方法です

Selenium::WebDriver::Support::Select.new(@driver.find_element(:name, name)).select_by(:text, data_to_select)
于 2013-02-27T21:39:34.890 に答える
0

私は Python API を使用していますが、アプローチを理解する必要があると思います。これが私のテストで使用している方法です。実際にリンクをクリックし、ドロップダウンが表示されるのを待って、オプションをクリックします。

def select_random_js_dropdown_option(driver, link_to_call_dropdown_xpath, dropdown_option_xpath):
    options = driver.find_elements_by_xpath(dropdown_option_xpath) 
    driver.find_element_by_xpath(link_to_call_dropdown_xpath).click()
    wait_for_element_to_load(driver, dropdown_option_xpath)
    random.choice(options).click()

def wait_for_element_to_load(driver, element_xpath, time_to_wait):
    try:
        return WebDriverWait(driver, time_to_wait).until(lambda driver : driver.find_element_by_xpath(element_xpath).is_displayed())
    finally:
        pass
于 2013-02-27T14:59:55.927 に答える
0

JavaScript は非表示のドロップダウンとやり取りしているだけなので、次を使用して実際のドロップダウンを再表示できます。

@driver.execute_script("document.getElementsByName('#{<REF_TO_HIDDEN_DROPDOWN}')[0].style.display = 'block'")

これにより、非表示のドロップダウンの表示が「ブロック」に設定され、通常どおり操作できるようになります。

于 2013-03-08T13:14:30.673 に答える