当style =“display:none;”时,Selenium上传文件

问题描述 投票:1回答:2

我收到一个错误“元素无法通过键盘访问”你们可以帮助我吗?我只是想附上PDF文件,但随着它的出现,我无法找到点击它或上传文件。

代码是: -

WebElement uploadElement = driver.findElement(By.xpath("//*[@id=\"registerproduct\"]/div/div[4]/div/div/div/div[2]/div[2]/div/div/span/label"));
uploadElement.sendKeys("C:\\Users\\Rahul\\Downloads\\kemgo-auction-detail-574.pdf");

Html是: -

<div class="col s12">
 <div class="file-field input-field">
    <div class="">
         <input id="btn_myFileInput" onchange="checkimagetype()" name="productsheet" style="display:none;" type="file">
         <span class="attached sp_head">
          <label for="btn_myFileInput" class="gray-lite attach_circle left"> 
              <i class="fa fa-paperclip small"></i>
           </label>
         <span class="sp_head">
        Attach specification sheet                                            </span>
          <span id="fileinput-msg"></span> </span>

    </div>
 </div> 

你们可以帮我上传文件吗?谢谢

java selenium selenium-webdriver webdriver display
2个回答
1
投票

根据您共享的HTML和代码试验,传递文件路径的WebElement不是<label>标记。你应该定位<input>标签。另外,<input>标签的style属性设置为display:none;。您可以使用以下代码块上传文件:

WebElement uploadElement = driver.findElement(By.xpath("//input[@id='btn_myFileInput']"));
((JavascriptExecutor)driver).executeScript("arguments[0].removeAttribute('style')", uploadElement);
uploadElement.sendKeys("C:\\Users\\Rahul\\Downloads\\kemgo-auction-detail-574.pdf");

0
投票

这是我的解决方案,我认为它可以解决其他情况。我将清楚地解释我的代码

    driver.executeScript("return document.readyState").equals("complete");

    WebElement uploadImage = driver.findElementByXPath("*<your_xPath_element>*");

    String scriptOn = "arguments[0].setAttribute('style','display: block')";

    driver.executeScript(scriptOn, uploadImage);

    uploadImage.sendKeys("*<your_image_URL>*");

    String scriptOff = "arguments[0].setAttribute('style','display: none')";

    driver.executeScript(scriptOff, uploadImage);

说明:

前提:

司机:FFDriver

语言:Java

脚步:

第1行:因为它是一个隐藏的元素所以你不知道它何时出现=>那你为什么需要等待满载的页面

第2行:定义你想要检测的元素,不要担心它无法检测到我的xPath:// input [@ accept ='image /'] *

第3行:为Style属性定义新值,如您所期望的那样示例URL =“path / 01.png”

第4行:执行命令元素的当前样式=新值('style','display:block')=>它使隐藏的元素显示

第5行:现在你的期望元素是show,所以你可以发送密码(图片URL)

第6 + 7行:将原始状态返回到此元素

© www.soinside.com 2019 - 2024. All rights reserved.