Web驱动程序Selenium浏览文件Java

Web驱动程序Selenium浏览文件Java,java,eclipse,junit,webdriver,Java,Eclipse,Junit,Webdriver,无法使用webdriver浏览文件 driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); driver.findElement(By.id("1434461513889_57_7_input.file")).sendKeys("C:\\PDF_V1_COL88810_6L_Frangipani_TL_Fr_P1211089.pdf"); 出现以下错误: NoSuchElementException:无法定位元素:{“方法

无法使用webdriver浏览文件

driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
driver.findElement(By.id("1434461513889_57_7_input.file")).sendKeys("C:\\PDF_V1_COL88810_6L_Frangipani_TL_Fr_P1211089.pdf");
出现以下错误:

NoSuchElementException:无法定位元素:{“方法”:“id”,“选择器”:“BatchUploadPlugin_57_fileupload”}


请按以下方式操作:

driver.findElement(By.id("1434461513889_57_7_input")).sendKeys("C:\\PDF_V1_COL88810_6L_Frangipani_TL_Fr_P1211089.pdf");

.File元素不应该在id中。

为了处理本机元素,为什么不能尝试Sikuli与Selenium脚本的集成。 有关更多详细信息,请参阅此链接。

我不是selenium方面的专家,但您发布的代码片段似乎无法引发此异常。当它搜索
BatchUploadPlugin\u 57\u fileupload
,它是表单id。您的代码正在搜索输入,它的id是
143441513889\u 57\u 7\u input

我还发现
driver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS)可能无法按开发人员的预期工作。尝试用
Thread.sleep(3000)替换它。我知道线程睡眠不推荐用于selenium,只是为了测试

试试下面的代码。。 您需要传递上载文本框webelement和上载按钮webelement

public void UploadFile(By locatorUpload, By locatorButton, String filePath){

        driver.findElement(locatorUpload).sendKeys(filePath);
        waitForElementClickable(driver, locatorButton, 4);
        driver.findElement(locatorButton).click();

    }

public void waitForElementClickable(WebDriver driver, By locator, Integer timeoutInSeconds){
    WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds);
    wait.until(ExpectedConditions.elementToBeClickable(locator));
}

从您给出的屏幕截图中,我可以看到相关元素位于iframe中。

(检查开发人员工具中位于该栏下方的第二个栏,该栏包含:检查器、控制台等。您将注意到iframe#iframe_1434526152814_57_7.。

因此,您无法发送指向它的路径。

为了发送上传路径,您需要先切换到帧,然后将路径发送到元素“Browse”进行上传。

对于切换帧,您可以使用下面的代码(我可以从屏幕截图中看到的帧id是
iframe\u 1434526152814\u 57\u 7
,我可以安全地假定它是动态的,不能用作要切换到的帧的id。因此,我假设页面中只有一个帧,因此是代码。
):

然后,使用以下代码将路径发送到元素

driver.findElement(By.xpath("//input[@name='userfile']")).sendKeys("C:\\PDF_V1_COL88810_6L_Frangipani_TL_Fr_P1211089.pdf");

对不起,没有,我只是在测试,因为我不知道有什么问题。所以,您可能知道它可能是什么,为什么不工作?不(有一个错误-“NoTouchElementException:Unnamable to locate element:…”我知道了,请从您的代码中删除隐式等待,它位于文件浏览代码的正上方。并添加
thread.sleep(10000)
。我做了,但有同样的错误,没有帮助。我甚至不知道它能做什么,也不知道为什么它不工作,因为我的按钮在不可见元素中:我想这是因为这个,但是如何使它可见?
NoTouchElementException
不是来自您的代码段。所以您正在寻找id为
BatchU的元素ploadPlugin_57_fileupload
甚至在等待之前就在代码的某个地方。我相信即使在加载DOM之前,您也在寻找该元素。使用完整的代码片段更新问题。locatorUpload和locatorButton之间有什么区别?我在表单上只有一个按钮。并且在“waitForElementClickable”上有一个错误-未定义的方法我也更新了waitForElementClickable()函数。您的网页是否有指向定位器文件的浏览按钮?如果是,请将元素传递给locatorUpload para,并将upload button元素传递给locatorButton。谢谢。但我应该为locatorUpload和locatorButton分配什么?我有按钮的ID“1434461513889_57_7_input”,我没有得到locatorUpload的结果?只是在替换为“Thread.sleep(3000)”之后出现了一个错误。NoTouchElementException:无法定位元素:…“它很有效!!太好了!很高兴它对您有效。请也接受答案。它将帮助其他面临类似问题的人,直接检查它。:)
driver.findElement(By.xpath("//input[@name='userfile']")).sendKeys("C:\\PDF_V1_COL88810_6L_Frangipani_TL_Fr_P1211089.pdf");