我正在运行Jenkins的selenium脚本,它在执行时运行在专门用于Selenium Tests的机器上。但我有一个问题。有一些动作如下所述,我正在使用Robot类执行:
1)点击图片上传图标。 2)打开与Ubuntu OS有关的窗口(文件上传)。 3)我必须超过图像的位置。 4)然后点击打开。
所有这些在本地计算机上运行良好。但由于Robot类的限制,在远程机器上失败了。
有人可以帮我解决这个问题吗?
为了更清晰,我附上了快照。
<div class="dropify-wrapper">
<div class="dropify-message">
<span class="file-icon"/>
<p>Drag and drop a file here or click</p>
<p class="dropify-error">Sorry, this file is too large</p>
</div>
<input id="category_tile_upload" class="dropify" data-default-file="" type="file"/>
<button class="dropify-clear" type="button">Remove</button>
<div class="dropify-preview">
<span class="dropify-render"/>
<div class="dropify-infos">
<div class="dropify-infos-inner">
<p class="dropify-filename">
<span class="file-icon"/>
<span class="dropify-filename-inner"/>
</p>
<p class="dropify-infos-message">Drag and drop or click to replace</p>
</div>
</div>
</div>
</div>
答案 0 :(得分:0)
这不应该用Robot
类来完成,因为它可以使用Selenium来解决。不要单击打开上传窗口的元素,而是使用:
如果您的输入有ID,请更好地使用By.id("inputID")
,否则:
WebElement inputElement = driver.findElement(By.cssSelector("input[type='file']"));
element.sendKeys("/full/path/to/your/file");
通过以下方式获取路径:
String pathToFile = System.getProperty("user.dir") + "/src/resources/your.file;
要使用getResourceAsStream()
,您可以:
try (InputStream in = this.getClass().getResourceAsStream(fileName)) {
return getStringFromInputStream(in);
} catch (IOException e) {
// handle
}
private String getStringFromInputStream(InputStream is) {
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
String line;
try {
br = new BufferedReader(new InputStreamReader(is));
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
答案 1 :(得分:0)
解决问题的常用方法是使用
WebElement file_input = driver.findElement(By.id("category_tile_upload"));
file_input.sendKeys("/path/to/file/to/upload");
实现这些代码行的结果是什么?