WebDriver Selenium 浏览文件 Java
WebDriver Selenium browse file Java
无法使用 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: Unnable to locate element: {"method":"id","selector":"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 脚本的集成。
您可以参考这个 link 了解更多详情。
http://selenium-suresh.blogspot.in/2014/01/sikuli-automation-tool-integration-with.html
我不是 selenium 方面的专家,但看起来您发布的代码片段无法抛出此异常。因为它搜索 BatchUploadPlugin_57_fileupload
,这是表单 ID。您的代码正在搜索输入,其 ID 为 1434461513889_57_7_input
.
我还发现 driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
可能无法像 these 开发人员预期的那样工作。尝试将其替换为 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 中。
(查看开发者工具栏下方的第二个栏,其中包含:Inspector、Console 等。您会注意到 iframe#iframe_1434526152814_57_7。)。
因此,您无法将路径发送给它。
为了发送上传路径,需要先切换到框架,然后发送路径到元素"Browse"上传。
对于切换帧,可以使用下面的代码(我从截图中看到的帧id是iframe_1434526152814_57_7
我可以放心地认为它是动态的,不能用作要切换到的框架的 ID。因此,我假设页面中只有 1 个框架,因此代码。) :
driver.switchTo().frame(0);
然后,使用以下代码将路径发送到元素:
driver.findElement(By.xpath("//input[@name='userfile']")).sendKeys("C:\PDF_V1_COL88810_6L_Frangipani_TL_Fr_P1211089.pdf");
无法使用 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: Unnable to locate element: {"method":"id","selector":"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 脚本的集成。 您可以参考这个 link 了解更多详情。 http://selenium-suresh.blogspot.in/2014/01/sikuli-automation-tool-integration-with.html
我不是 selenium 方面的专家,但看起来您发布的代码片段无法抛出此异常。因为它搜索 BatchUploadPlugin_57_fileupload
,这是表单 ID。您的代码正在搜索输入,其 ID 为 1434461513889_57_7_input
.
我还发现 driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
可能无法像 these 开发人员预期的那样工作。尝试将其替换为 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 中。
(查看开发者工具栏下方的第二个栏,其中包含:Inspector、Console 等。您会注意到 iframe#iframe_1434526152814_57_7。)。
因此,您无法将路径发送给它。
为了发送上传路径,需要先切换到框架,然后发送路径到元素"Browse"上传。
对于切换帧,可以使用下面的代码(我从截图中看到的帧id是iframe_1434526152814_57_7
我可以放心地认为它是动态的,不能用作要切换到的框架的 ID。因此,我假设页面中只有 1 个框架,因此代码。) :
driver.switchTo().frame(0);
然后,使用以下代码将路径发送到元素:
driver.findElement(By.xpath("//input[@name='userfile']")).sendKeys("C:\PDF_V1_COL88810_6L_Frangipani_TL_Fr_P1211089.pdf");