Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Silvernium. Загрузка файлов в Silverlight.


(DRoss) #1

Возникла проблема загрузки файлов.

Для загрузки на страничке используется Silverlight. Обычные способы типа SendKeys или Type не работают.

Нагуглил, что для Silverlight есть такая приблуда как Silvernium.

Поделитесь пожалуйста опытом, если кто-то с ней работал. Особенно интересует, загрузка файлов.

 

П.С. Ну и конечно, если есть идеи как загрузить файл другими способоми, то пишите пожалуйста. Вдрук прокатит =)

Заранее спасибо.


(Mykhailo Poliarush) #2

нет, особо не работал да и вряд ли уже придется так как этот модуль для Selenium RC

впрочем, в чем именно вопрос? как написать код?

может быть эта ссылка http://assertselenium.com/2012/11/07/silvernium-selenium-for-silverlight-applications/ Вам поможет 

на каком языке вы программируете и какую версию selenium вы используете?


(DRoss) #3

Я пишу на C#. Пользуюсь Webdriver, но в некоторых методах испльзую и первый селениум ()

 

Спасибо за ответ и за ссылку. К сожалению она, как и многие другие, рассказывает как проверить или зассетить значения свойств.

 

Раньше я мог вызвать SendKeys на input text field с локальным адресом файла и этого было достаточно. Сейчас input text field стало несколько (хотя фактически видно только одно).

Вызов SendKeys на видимые input ни к чему не приводят.

 

Если есть идея как загрузить файл в таком случае, буду рад услышать.

 

Вот html(это все для одного input text field, клик по каоторому открывает поиск файла на компьютере):

    <table>
      <tr>
        <td align="left" style="white-space:normal;border-right-width:0px;" class="Top dxgv">
...
        <br />Загрузить файл:
        <input type="hidden" value="1" name="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_IC"
        id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_IC" style="background-color: rgb(255, 255, 255);" />
        <script type="text/javascript" src="/DXR.axd?r=1_81-bEap5" id="dxis_580467879"></script>
        <table cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; width: 231px;"
        id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171" class="dxucControl_Aqua">
          <tbody>
            <tr>
              <td style="width:100%;vertical-align:top;">
                <table cellspacing="0" cellpadding="0" border="0" style="width:100%;border-collapse:collapse;"
                class="dxucInputs_Aqua" id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_UploadInputs">
                  <tbody>
                    <tr style="display:none;">
                      <td align="left" style="width:100%;border-right-width:0px;" class="dxucTextBox_Aqua"
                      id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_TextBoxT">
                        <input type="file" style="position:absolute;filter:alpha(opacity=0);opacity:0;top:-5000px;"
                        name="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_TextBoxT_Input"
                        id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_TextBoxT_Input" />
                        <input type="text" style="background-color:Transparent;border-width:0px;" tabindex="-1" readonly="readonly"
                        class="dxucEditArea_Aqua"
                        id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_TextBoxT_FakeInput" />
                      </td>
                      <td style="border-left-width:0px;" class="dxCB dxucTextBox_Aqua"
                      id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_ClearBoxT">
                        <a style="visibility:hidden;" href="javascript:;"
                        onclick="aspxUClearFileInputClick(&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;,T)">

                          <img style="display:inline;text-decoration:none;" alt="Очистить список выбранных файлов"
                          src="/DXR.axd?r=1_5-bEap5" class="dxWeb_ucClearButton_Aqua" title="Очистить список выбранных файлов"
                          id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_ClearBoxTImg" />
                        </a>
                      </td>
                      <td class="dxBB dxucBrowseButton_Aqua"
                      id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_BrowseT">
                        <a href="javascript:;" tabindex="-1">Обзор...</a>
                      </td>
                    </tr>
                    <tr style="display:none;" id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_ErrRRT">
                      <td colspan="3" class="dxucErrorCell_Aqua"></td>
                    </tr>
                    <tr style="display:none;">
                      <td style="height:2px;" colspan="3">
                        <div style="height:2px;width:1px;overflow:hidden;"></div>
                      </td>
                    </tr>
                    <tr>
                      <td align="left" style="width:100%;border-right-width:0px;" class="dxucTextBox_Aqua"
                      id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_TextBox0">
                      <input type="file" style="position: absolute; opacity: 0; top: -5000px; left: 217px;"
                      name="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_TextBox0_Input"
                      id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_TextBox0_Input"
                      class=" ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_dxFITextBoxHover" />
                      <input type="text" style="background-color:Transparent;border-width:0px;" tabindex="-1" readonly="readonly"
                      class="dxucEditArea_Aqua"
                      id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_TextBox0_FakeInput" /></td>
                      <td style="border-left-width:0px;" class="dxCB dxucTextBox_Aqua"
                      id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_ClearBox0">
                      <a style="visibility:hidden;" href="javascript:;"
                      onclick="aspxUClearFileInputClick(&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;,0)">
                        <img style="display:inline;text-decoration:none;" alt="Очистить список выбранных файлов"
                        src="/DXR.axd?r=1_5-bEap5" class="dxWeb_ucClearButton_Aqua" title="Очистить список выбранных файлов"
                        id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_ClearBox0Img" />
                      </a> &lt;
                       /td&gt;</td>
                      <td class="dxBB dxucBrowseButton_Aqua"
                      id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_Browse0">
                        <a href="javascript:;" tabindex="-1">Обзор...</a>
                      </td>
                    </tr>
                    <tr style="display:none;" id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_ErrR0">
                      <td colspan="3" class="dxucErrorCell_Aqua"></td>
                    </tr>
                  </tbody>
                </table>
                <div style="padding-top:13px;display:none;" class="dxucErrorCell_Aqua"
                id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_CErr">Common error text is displayed here</div>
              </td>
            </tr>
          </tbody>
        </table>
        <iframe scrolling="no" frameborder="0"
        style="position:absolute;display:none;z-index:100000;filter:progid:DXImageTransform.Microsoft.Alpha(Style=0, Opacity=0);"
        name="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_UploadIframe" src=""
        id="ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171_UploadIframe"></iframe>
        <script type="text/javascript" id="dxss_1650467547">
&amp;lt;!--
aspxAddHoverItems(&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;,[[[&#39;dxucBrowseButtonHover_Aqua&#39;],[&#39;&#39;],[&#39;Browse0&#39;],,[[&#39;&#39;]],[&#39;Img&#39;]]]);
aspxAddPressedItems(&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;,[[[&#39;dxucBrowseButtonPressed_Aqua&#39;],[&#39;&#39;],[&#39;Browse0&#39;],,[[&#39;&#39;]],[&#39;Img&#39;]]]);
aspxAddDisabledItems(&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;,[[[&#39;dxucDisabled_Aqua
dxucButtonDisabled_Aqua&#39;],[&#39;&#39;],[&#39;Add&#39;,&#39;Upload&#39;,&#39;Cancel&#39;,&#39;Remove0&#39;],,[[&#39;&#39;],[&#39;&#39;],[&#39;&#39;],[&#39;&#39;]],[&#39;Img&#39;]],[[&#39;dxucDisabled_Aqua
dxucTextBoxDisabled_Aqua&#39;],[&#39;&#39;],[&#39;TextBox0&#39;],[&#39;&#39;,&#39;_FakeInput&#39;]],[[&#39;dxucDisabled_Aqua
dxucTextBoxDisabled_Aqua&#39;],[&#39;&#39;],[&#39;ClearBox0&#39;],,[[{&#39;spriteCssClass&#39;:&#39;dxWeb_ucClearButtonDisabled_Aqua&#39;}]],[&#39;Img&#39;]],[[&#39;dxucDisabled_Aqua
dxucBrowseButtonDisabled_Aqua&#39;],[&#39;&#39;],[&#39;Browse0&#39;],,[[&#39;&#39;]],[&#39;Img&#39;]]]);

var dxo = new ASPxClientUploadControl(&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;);
window[&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;] = dxo;
dxo.uniqueID = &#39;ctl00$BodyPlace$TemplatesGridView$PriceUploadControl_1427171&#39;;
dxo.FileUploadComplete.AddHandler(function (s, e) { if (e.isValid) { alert(&#39;Файл загружен и будет обработан в ближайшее
время&#39;); } else { alert(e.errorText);  } TemplatesGridView.Refresh();  });
dxo.TextChanged.AddHandler(function(s, e) { s.Upload(); });
dxo.fileInputSpacing = &#39;2px&#39;;
dxo.generalErrorText = &#39;Ошибка загрузки&#39;;
dxo.unspecifiedErrorText = &#39;На сервере возникла внутренняя неизвестная ошибка, которая не позволяет выполнить запрос.&#39;;
dxo.uploadWasCanceledErrorText = &#39;Загрузка файла была отменена.&#39;;
dxo.invalidWindowsPathErrorText = &#39;Файловый путь &quot;{0}&quot; не является путем Windows.&#39;;
dxo.selectedSeveralFilesText = &#39;Для загрузки выбрано файлов: {0}&#39;;
dxo.progressHandlerPage = &#39;/ASPxUploadProgressHandlerPage.ashx&#39;;
dxo.uploadingKey = &#39;c7eef016-43e0-4950-b5be-561ed1b10c38&#39;;
dxo.templateDisabledTextBoxItem =
({&#39;element&#39;:&#39;TextBoxT&#39;,&#39;postfixes&#39;:[&#39;&#39;,&#39;_FakeInput&#39;],&#39;imageUrls&#39;:[&#39;&#39;],&#39;imagePostfixes&#39;:[&#39;&#39;],&#39;className&#39;:[&#39;dxucDisabled_Aqua
dxucTextBoxDisabled_Aqua&#39;],&#39;cssText&#39;:[&#39;&#39;],&#39;name&#39;:&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;});
dxo.templateDisabledClearBoxItem =
({&#39;element&#39;:&#39;ClearBoxT&#39;,&#39;postfixes&#39;:[&#39;&#39;],&#39;imagePostfixes&#39;:[&#39;Img&#39;],&#39;className&#39;:[&#39;dxucDisabled_Aqua
dxucTextBoxDisabled_Aqua&#39;],&#39;cssText&#39;:[&#39;&#39;],&#39;name&#39;:&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;,&#39;imageObjs&#39;:[{&#39;spriteCssClass&#39;:&#39;dxWeb_ucClearButtonDisabled_Aqua&#39;}]});
dxo.templateHoveredBrowseItem =
({&#39;element&#39;:&#39;BrowseT&#39;,&#39;postfixes&#39;:[&#39;&#39;],&#39;imagePostfixes&#39;:[&#39;Img&#39;],&#39;className&#39;:[&#39;dxucBrowseButtonHover_Aqua&#39;],&#39;cssText&#39;:[&#39;&#39;],&#39;name&#39;:&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;,&#39;imageObjs&#39;:[&#39;&#39;]});
dxo.templatePressedBrowseItem =
({&#39;element&#39;:&#39;BrowseT&#39;,&#39;postfixes&#39;:[&#39;&#39;],&#39;imagePostfixes&#39;:[&#39;Img&#39;],&#39;className&#39;:[&#39;dxucBrowseButtonPressed_Aqua&#39;],&#39;cssText&#39;:[&#39;&#39;],&#39;name&#39;:&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;,&#39;imageObjs&#39;:[&#39;&#39;]});
dxo.templateDisabledBrowseItem =
({&#39;element&#39;:&#39;BrowseT&#39;,&#39;postfixes&#39;:[&#39;&#39;],&#39;imagePostfixes&#39;:[&#39;Img&#39;],&#39;className&#39;:[&#39;dxucDisabled_Aqua
dxucBrowseButtonDisabled_Aqua&#39;],&#39;cssText&#39;:[&#39;&#39;],&#39;name&#39;:&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;,&#39;imageObjs&#39;:[&#39;&#39;]});
dxo.templateDisabledRemoveItem =
({&#39;element&#39;:&#39;RemoveT&#39;,&#39;postfixes&#39;:[&#39;&#39;],&#39;imagePostfixes&#39;:[&#39;Img&#39;],&#39;className&#39;:[&#39;dxucDisabled_Aqua
dxucButtonDisabled_Aqua&#39;],&#39;cssText&#39;:[&#39;&#39;],&#39;name&#39;:&#39;ctl00_BodyPlace_TemplatesGridView_PriceUploadControl_1427171&#39;,&#39;imageObjs&#39;:[&#39;&#39;]});
dxo.InlineInitialize();

//--&amp;gt;
</script></td>
      </tr>
    </table>


(apetrovskiy) #4

Вызов SendKeys на видимые input ни к чему не приводят.

А какой из пяти инпутов ваш? Два из них реагируют на строку вида "aaa" сообщением, что это не загрузить (то есть это те инпуты, что вам и нужны?).

Если же предложить им полный путь к файлу, сообщения становятся другими:

1) тот, что с TextBoxT_Input на конце:

"Element must be displayed to click" ElementNotVisibleException

2) тот, что с TextBox0_Input на конце:

"Element is not clickable at point (338, -4987)" InvalidOperationException

Если мой эксперимент точен (вроде бы, да), то тут что-то с координатами или с тем, что они (инпуты) уплывают за экран.

Ещё два инпута вне экрана и нами не рассматриваются.

Обратите внимание, что есть ещё пятый инпут (оканчивется на _TextBox0_FakeInput), он принимает инпут без сообщений (но текста не появляется, это что-то явно для юнит-тестов). Возможно, ваш текст улетает в него - попросите его задизейблить или задвинуть за экран?