这是上传照片的html代码:
<div id="choose-photo" class="controls avatar-settings inline-upload-avatar dropdown center">
<div class="uploader-image uploader-avatar clearfix">
<div class="dropdown-menu">
<div class="dropdown-caret">
<span class="caret-outer"></span>
<span class="caret-inner"></span>
</div>
<ul tabindex="-1" role="menu" aria-hidden="true">
<li id="photo-choose-existing" class="photo-choose-existing upload-photo" role="presentation">
<button type="button" class="dropdown-link" role="menuitem">Prze?lij zdj?cie</button>
<div class="photo-selector">
<button class="btn" type="button">
Zmie? zdj?cie
</button>
<span class="photo-file-name">Nie wybrano pliku</span>
<div class="image-selector">
<input type="hidden" name="media_file_name" class="file-name">
<input type="hidden" name="media_data_empty" class="file-data">
<label class="t1-label">
<span class="u-hiddenVisually">Dodaj zdj?cie</span>
<input type="file" name="media_empty" class="file-input js-tooltip" tabindex="-1" accept="image/gif,image/jpeg,image/jpg,image/png" data-original-title="Dodaj zdj?cie">
</label>
</div>
</div>
</li>
<li id="photo-choose-webcam" class="u-hidden" role="presentation">
<button type="button" class="dropdown-link">Zrób zdj?cie</button>
</li>
<li id="photo-delete-image" class="u-hidden" role="presentation">
<button type="button" class="dropdown-link" role="menuitem">Usu?</button>
</li>
<li class="dropdown-divider" role="presentation"></li>
<li class="cancel-options" role="presentation">
<button type="button" class="dropdown-link" role="menuitem">Anuluj</button>
</li>
</ul>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我创建了一个简单的方法来发送文本到输入(它在屏幕上不可见):
fileInput = driver.find_element_by_name('media_empty')
fileInput.send_keys(path)
Run Code Online (Sandbox Code Playgroud)
但它没有做任何事情.我也没有任何错误.
所以,这是第二种方法,可能有效:
<div class="ProfileAvatarEditing-buttonContainer">
<button class="ProfileAvatarEditing-button u-boxShadowInsetUserColorHover" type="button" tabindex="2">
<div class="ProfileAvatarEditing-addAvatarHelp">
<span class="Icon Icon--cameraPlus"></span>
<p>Dodaj zdj?cie profilowe</p>
</div>
<div class="ProfileAvatarEditing-changeAvatarHelp">
<span class="Icon Icon--camera"></span>
<p>Zmie? zdj?cie profilowe</p>
</div>
<div class="ProfileAvatarEditing-dropAvatarHelp">
<span class="Icon Icon--cameraPlus"></span>
<p>Upu?? zdi?cie profilowe tutaj</p>
</div>
</button>
Run Code Online (Sandbox Code Playgroud)
用户可以在此处放置和删除文件.我发现了这个问题:Selenium:从文件系统拖放到webdriver?但是我仍然不知道如何在这种情况下使用它.
所以问题是如何将文件路径发送到输入以触发文件上传.在这种情况下,当您从文件对话框中选择文件或拖放它时,您将看到确认窗口,其中包含您照片上的预览.那么剩下要做的就是点击确认.但我不知道如何发送它.
任何帮助将不胜感激.
编辑:我找到了一个解决方案(我自己的答案如下):
fileInput = driver.find_element_by_xpath('//*[@id="photo-choose-existing"]/div/div/label/input')
fileInput.send_keys(path)
Run Code Online (Sandbox Code Playgroud)
但还有一个问题:照片上传但文件对话框仍然打开 - 我不知道如何关闭它.我试过访问它:
dialog = driver.switch_to.active_element['value']
Run Code Online (Sandbox Code Playgroud)
但我不知道如何关闭它.
如果没有显式等待页面上存在元素,则假设该元素存在于页面上。
然后试试这个:
driver.execute_script("document.getElementById('ID_HERE').setAttribute('value', 'PATH_HERE')");
Run Code Online (Sandbox Code Playgroud)
希望对你有帮助!
| 归档时间: |
|
| 查看次数: |
706 次 |
| 最近记录: |