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"}

HTML code

请按照以下方式进行:

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");