无法找到以下HTML代码的输入元素。
我的代码:
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");
获取例外:
java.lang.NullPointerException
at pageObjects.ProofPage.UploadFile(ProofPage.java:25)
HTML code excerpt:
<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>
答案 0 :(得分:0)
ExpectedConditions.visibilityOfElementLocated
会返回一个WebElement,因此您可以直接在其上调用.sendKeys
。
WebDriverWait wait1 = new WebDriverWait(utils.driver, 30);
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type='file']"))).sendKeys("C:\\Users\\....\\Desktop\\TestImage.png");
答案 1 :(得分:0)
您收到NullPointerException
,因为UploadFile()
出现了问题。我不确定是什么,因为你没有发布与它相关的代码。从你提供的代码中,我不知道为什么你还需要它。
以下代码应该有效。
WebDriverWait wait1 = new WebDriverWait(utils.driver, 30);
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type='file']"))).sendKeys("C:\\Users\\....\\Desktop\\TestImage.png");
您等待所需元素的可见性,然后.sendKeys()
到它。
答案 2 :(得分:0)
尝试使用以下代码:
WebDriverWait wait1 = new WebDriverWait(driver, [TimeOutInSeconds]);
driver.findElement(By.xpath("//input[@type='file']")).sendKeys([FileNameWithPath]);
wait1.until(ExpectedConditions.invisibilityOfElementLocated([ProgressBarLocator]));
其中
TimeOutInSeconds -> Maximum Timeout time to upload your file
FileNameWithPath = "C:\\Users\\....\\Desktop\\TestImage.png"
ProgressBarLocator -> Locator element indicating uploading continues
尝试使用更长的超时时间而不是30秒。它不会影响上传,因为只要上传指标不可见,它就会返回成功。
答案 3 :(得分:0)
根据您分享的代码, NullPointerException
几乎就是因为 -
当你这样做时:
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type='file']")));
返回WebElement
。首先,我们不再需要使用element = driver.findElement(By.cssSelector("input[type='file']"));
搜索相同的元素。我们有效地做到了:
WebDriverWait wait1 = new WebDriverWait(utils.driver, 30);
WebElement element = wait1.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type='file']")));
现在,一旦返回预期的 WebElement
,我们只需要在同一 {{1}上调用 sendKeys()
方法 (不通过任何其他方法,例如 WebElement
),如下所示:
UploadFile()
为了摆脱 element.sendKeys("C:\\Users\\....\\Desktop\\TestImage.png");
,您的代码将是:
NullPointerException