在不使用Robot类(Selenium)的情况下处理Ubuntu中的OS窗口

时间:2016-11-22 11:02:04

标签: java selenium selenium-webdriver

我正在运行Jenkins的selenium脚本,它在执行时运行在专门用于Selenium Tests的机器上。但我有一个问题。有一些动作如下所述,我正在使用Robot类执行:

1)点击图片上传图标。 2)打开与Ubuntu OS有关的窗口(文件上传)。 3)我必须超过图像的位置。 4)然后点击打开。

所有这些在本地计算机上运行良好。但由于Robot类的限制,在远程机器上失败了。

有人可以帮我解决这个问题吗?

为了更清晰,我附上了快照。

enter image description here

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

2 个答案:

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

实现这些代码行的结果是什么?