如何用 Selenium 处理 <p:fileUpload auto="true">?
How to handle <p:fileUpload auto="true"> with Selenium?
我正在使用 Primeface 的 (6.1.1) p:fileUpload 组件和 auto="true"。我还没有找到使用 Selenium (3.14.0) 上传文件的解决方案。
xhtml 代码如下所示:
<p:fileUpload id="myUpload" mode="advanced" auto="true"...>
生成的 html 代码如下所示:
<div id="myContainer:myUpload" class="ui-fileupload ui-widget ui-fileupload-responsive">
<div class="ui-fileupload-buttonbar ui-widget-header ui-corner-top">
<span class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left ui-fileupload-choose" tabindex="0" role="button" aria-labelledby="myContainer:myUpload_label">
<span class="ui-button-icon-left ui-icon ui-c ui-icon-plusthick"/>
<span id="myContainer:myUpload_label" class="ui-button-text ui-c">Select File</span>
<input id="myContainer:myUpload_input" name="myContainer:myUpload_input" tabindex="-1" type="file">
</span>
</div>
<div class="ui-fileupload-content ui-widget-content ui-corner-bottom">
<div class="ui-messages ui-widget ui-helper-hidden ui-fileupload-messages">
<div class="ui-messages-error ui-corner-all">
<a class="ui-messages-close" href="#">
<span class="ui-icon ui-icon-close"/>
</a>
<span class="ui-messages-error-icon"/>
<ul/>
</div>
</div>
<div class="ui-fileupload-files">
<div/>
</div>
</div>
</div>
我找到了 auto="false" 的解决方案,但没有找到 auto="true" 的解决方案。我试图将文件路径发送到输入元素:
WebElement element = driver.findElement(By.id("...myUpload_input"));
new Actions(driver).sendKeys(element, mypath).perform();
但这显然是不够的,即使在附加 RETURN 键时也是如此。
我真的卡在这里了。如何做到这一点?
提前致谢!
@kopfarzt 你试过传统的方式吗:
WebElement uploadElement = driver.findElement(By.id("uploadfile_0"));
uploadElement.sendKeys("C:\newhtml.html");
试试下面的代码
public class Test{
public static void main(String[] args) {
System.setProperty("webdriver.firefox.marionette","C:\geckodriver.exe");
String baseUrl = "url";
WebDriver driver = new FirefoxDriver();
driver.get(baseUrl);
WebElement uploadElement = driver.findElement(By.id("uploadfile_0"));
// enter the file path onto the file-selection input field
uploadElement.sendKeys("C:\newhtml.html");
}
}
我正在使用 Primeface 的 (6.1.1) p:fileUpload 组件和 auto="true"。我还没有找到使用 Selenium (3.14.0) 上传文件的解决方案。
xhtml 代码如下所示:
<p:fileUpload id="myUpload" mode="advanced" auto="true"...>
生成的 html 代码如下所示:
<div id="myContainer:myUpload" class="ui-fileupload ui-widget ui-fileupload-responsive">
<div class="ui-fileupload-buttonbar ui-widget-header ui-corner-top">
<span class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left ui-fileupload-choose" tabindex="0" role="button" aria-labelledby="myContainer:myUpload_label">
<span class="ui-button-icon-left ui-icon ui-c ui-icon-plusthick"/>
<span id="myContainer:myUpload_label" class="ui-button-text ui-c">Select File</span>
<input id="myContainer:myUpload_input" name="myContainer:myUpload_input" tabindex="-1" type="file">
</span>
</div>
<div class="ui-fileupload-content ui-widget-content ui-corner-bottom">
<div class="ui-messages ui-widget ui-helper-hidden ui-fileupload-messages">
<div class="ui-messages-error ui-corner-all">
<a class="ui-messages-close" href="#">
<span class="ui-icon ui-icon-close"/>
</a>
<span class="ui-messages-error-icon"/>
<ul/>
</div>
</div>
<div class="ui-fileupload-files">
<div/>
</div>
</div>
</div>
我找到了 auto="false" 的解决方案,但没有找到 auto="true" 的解决方案。我试图将文件路径发送到输入元素:
WebElement element = driver.findElement(By.id("...myUpload_input"));
new Actions(driver).sendKeys(element, mypath).perform();
但这显然是不够的,即使在附加 RETURN 键时也是如此。
我真的卡在这里了。如何做到这一点?
提前致谢!
@kopfarzt 你试过传统的方式吗:
WebElement uploadElement = driver.findElement(By.id("uploadfile_0"));
uploadElement.sendKeys("C:\newhtml.html");
试试下面的代码
public class Test{
public static void main(String[] args) {
System.setProperty("webdriver.firefox.marionette","C:\geckodriver.exe");
String baseUrl = "url";
WebDriver driver = new FirefoxDriver();
driver.get(baseUrl);
WebElement uploadElement = driver.findElement(By.id("uploadfile_0"));
// enter the file path onto the file-selection input field
uploadElement.sendKeys("C:\newhtml.html");
}
}