Импортировать файл в Selenium - PullRequest
       9

Импортировать файл в Selenium

0 голосов
/ 11 октября 2018

Страница содержит это form:

<form target="PID297_TGT_FRAME" action="/app/upload/57aa897a64d9" class="form form-default" method="post" enctype="multipart/form-data">
    <div>
        <input type="hidden">
        <input name="PID297_file" class="file-upload" type="file">
        <div aria-pressed="false" role="button" class="v-button" tabindex="0">
            <span class="v-button-wrap">
                <span class="v-button-caption">Import</span>
            </span>
        </div>
    </div>
</form>

Теперь я хочу загрузить файл в форму.После поиска в stackoverflow я обнаружил, что можно отправить путь к файлу на input с типом file.Поэтому я сделал это:

var elem = Driver.FindElement(By.Name("PID297_file")).SendKeys(filePath);

К сожалению, я получаю Exception с сообщением:

Element is not currently visible and so may not be interacted with

Что-то не так с моим кодом?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Это сообщение об ошибке ...

Element is not currently visible and so may not be interacted with

... означает, что экземпляру WebDriver не удалось найти элемент, поскольку он не был видимым .

Положительным отрывом от этого сообщения является то, что желаемый элемент присутствует в HTML DOM , но не видимый возможно, поскольку он не находится внутри Окно просмотра

Решение

Вам необходимо поместить нужный элемент в Окно просмотра перед вызовом SendKeys() следующим образом:

  • CssSelector:

    new WebDriverWait(Driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("input.file-upload[name$='_file']"))).SendKeys(filePath);
    
  • XPath:

    new WebDriverWait(Driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//input[@class='file-upload' and contains(@name,'_file')]"))).SendKeys(filePath);
    
0 голосов
/ 11 октября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...