首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在标签标签下找到输入文件类型元素

如何在标签标签下找到输入文件类型元素
EN

Stack Overflow用户
提问于 2017-11-28 14:05:36
回答 4查看 137关注 0票数 1

无法找到以下HTML代码的输入元素。

我的代码:

代码语言:javascript
复制
WebDriverWait wait1 = new WebDriverWait(utils.driver, 30);
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type='file']")));
element = driver.findElement(By.cssSelector("input[type='file']"));
UploadFile().sendKeys("C:\\Users\\....\\Desktop\\TestImage.png");

异常:

代码语言:javascript
复制
java.lang.NullPointerException
at pageObjects.ProofPage.UploadFile(ProofPage.java:25)

HTML代码摘录:

代码语言:javascript
复制
<form name="proofCtrl.frmProof" ng-submit="proofCtrl.submitProof( $event )" class="ng-pristine ng-valid">
    <div layout-margin="" class="layout-margin">
        <div class="column">
            <fp-s3-upload user-obj="proofCtrl.userObj" hide-upload-button="true" file-types="jpg,jpeg,png,bmp,gif,pdf,doc,docx,rtf" max-size-in-bytes="12000000" do-upload-all="proofCtrl.doUpload" on-get-url="proofCtrl.getUrl( fileObj )" on-preview-click="proofCtrl.showPreview( imgObj )" on-upload-error="proofCtrl.uploadError( error )" on-upload-warning="proofCtrl.uploadWarning( warning )" on-upload-all-start="proofCtrl.uploadAllStart()" on-upload-all-complete="proofCtrl.uploadAllComplete()" on-add-file="proofCtrl.onAddFile()" on-add-all="proofCtrl.addAll( filesObj, queueCount )" on-remove-file="proofCtrl.removeFile( filesObj, queueCount )" on-add-file-fail="proofCtrl.addFileFail( fileObj, filterObj )" on-item-upload-success="proofCtrl.itemUploadSuccess( fileObj )" class="ng-isolate-scope">
                <div class="fp-s3-upload-container layout-xs-column layout-sm-column layout-gt-sm-row layout-align-xs-stretch-stretch layout-align-sm-stretch-stretch layout-align-gt-sm-stretch-stretch flex-xs-grow flex-sm-grow flex-gt-sm-grow" flex-gt-sm="grow" layout-gt-sm="row" layout-align-gt-sm="stretch stretch" flex-sm="grow" layout-sm="column" layout-align-sm="stretch stretch" flex-xs="grow" layout-xs="column" layout-align-xs="stretch stretch">
                    <div class="fp-s3-upload-target layout-xs-row layout-sm-row layout-gt-sm-column layout-align-xs-stretch-stretch layout-align-sm-stretch-stretch layout-align-gt-sm-stretch-stretch flex-xs-grow flex-sm-grow flex-gt-sm-30" flex-gt-sm="30" layout-gt-sm="column" layout-align-gt-sm="stretch stretch" flex-sm="grow" layout-sm="row" layout-align-sm="stretch stretch" flex-xs="grow" layout-xs="row" layout-align-xs="stretch stretch">
                        <!-- <div ng-show="fpS3UploadCtrl.uploader.queue.length" class="ui red circular label floating ng-hide" ng-cloak>{{ fpS3UploadCtrl.uploader.queue.length }}</div> -->
                        <label ng-attr-for="{{ fpS3UploadCtrl.id }}" nv-file-drop="" nv-file-over="" uploader="fpS3UploadCtrl.uploader" over-class="drag-over" flex="grow" layout="row" layout-fill="" class="layout-fill layout-row flex-grow" for="fpop-14fa8c17018d">
                            <input nv-file-select="" uploader="fpS3UploadCtrl.uploader" ng-attr-id="{{ fpS3UploadCtrl.id }}" multiple="" id="fpop-14fa8c17018d" type="file">
                        </label>
                    </div>
                </div>
            </fp-s3-upload>
        </div>
    </div>
</form>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-29 07:14:00

根据你共享的代码,NullPointerException很可能是在卡上,因为-

当你这样做时:

代码语言:javascript
复制
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type='file']")));

返回WebElement。因此,首先,我们不再需要使用element = driver.findElement(By.cssSelector("input[type='file']"));搜索相同的元素了。因此,我们可以有效地:

代码语言:javascript
复制
WebDriverWait wait1 = new WebDriverWait(utils.driver, 30);
WebElement element = wait1.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type='file']")));

现在,一旦返回了预期的WebElement,我们只需要调用同一个WebElement 上的sendKeys()方法(不是通过任何其他方法,例如UploadFile() ),如下所示:

代码语言:javascript
复制
element.sendKeys("C:\\Users\\....\\Desktop\\TestImage.png");

因此,要摆脱NullPointerException,您的代码如下:

代码语言:javascript
复制
WebDriverWait wait1 = new WebDriverWait(utils.driver, 30);
WebElement element = wait1.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type='file']")));
element.sendKeys("C:\\Users\\....\\Desktop\\TestImage.png");
票数 0
EN

Stack Overflow用户

发布于 2017-11-28 15:08:56

ExpectedConditions.visibilityOfElementLocated返回一个WebElement,因此您可以在它上直接调用.sendKeys

代码语言:javascript
复制
WebDriverWait wait1 = new WebDriverWait(utils.driver, 30);
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type='file']"))).sendKeys("C:\\Users\\....\\Desktop\\TestImage.png");
票数 0
EN

Stack Overflow用户

发布于 2017-11-28 16:21:50

您正在获得NullPointerException,因为UploadFile()中出现了一些问题。我不知道是什么原因,因为你没有发布与它相关的代码。从你提供的代码来看,我不知道你为什么需要它。

下面的代码应该有效。

代码语言:javascript
复制
WebDriverWait wait1 = new WebDriverWait(utils.driver, 30);
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type='file']"))).sendKeys("C:\\Users\\....\\Desktop\\TestImage.png");

等待所需元素的可见性,然后对其进行.sendKeys()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47533509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档