远程主机上的Selenium 2.0 Robot类



我只是写了一个应该通过webApp下载pdf文件的测试(是的,我知道,我不应该在selenium上这样做,但是你知道,订单。)

我需要什么?

对于不同的场景,我必须下载不同的pdf,重命名它并放置到自定义目录。所以,我必须处理系统模态窗口。一切都很好,所以测试是在远程主机上运行的,当我点击下载文件时,我处理系统模态窗口(我使用robotil包,它是扩展的机器人类,允许我们在远程主机上使用机器人类),所以我使用robotil类输入文件的路径,以及系统模态上的文件名,然后点击"Enter"确认并保存文件。这是我需要的一切,它工作,所以问题在哪里?这里:有人应该被记录到远程主机,如果我通过rdp登录并看着屏幕(并在我的主机上做我的东西),那么一切都很好,但对于没有人被记录的情况,看起来在测试期间webbrowser没有FOCUS,所以每次robotil类做一些动作,这个动作不集中在webbrowser(因为它应该)。

测试类:

@Test
public void compareDeposits() throws Exception {
    HomePage homePage = new HomePage(driver);
    PageFactory.initElements(driver, homePage);
    PrintDepositsPage printDepositsPage = (PrintDepositsPage) homePage.openViaUrl(Data.baseUrl).openViewViaTopMenu(
            ETopMenuItem.PrintDeposits);
    ((PrintDepositsPage) printDepositsPage).goToPrintedDepositsTab();
    printDepositsPage.getPrintedDepositsDateRangeFromInput().click();
    printDepositsPage.getPrintedDepositsDateRangeFromInput().clear();
    printDepositsPage.getPrintedDepositsGoButton().click();
    printDepositsPage.getFirstRecordOnPrintedDepositsTab().click();
    handler.getRobot().mouseClick(371, 274, InputEvent.BUTTON1_MASK);// get focus
    printDepositsPage.getPrintButtonEnabled().click();
    handler.downloadFile("DepositTest");

处理程序对象声明:

class SystemModalWindowHandler {
private RemoteWebDriver driver;
private Date date = new Date();
private DateFormat dateFormat = new SimpleDateFormat("yyy/mm/dd");
private String extendedTestName = dateFormat.format(date).replace("/", ".") + ".pdf";
private Robotil robotil = new Robotil("xxxxx", 6667);
public Robotil getRobot(){
    return robotil;
}
public void downloadFile(String testFileName) throws AWTException, InterruptedException {
    boolean continueBool = true;
    while (continueBool) {
        String pathToTestFile = new String("C:\DiffPdfData\" + testFileName + "\"
                + extendedTestName);
        Thread.sleep(3000);
        for (int i = 0; i < pathToTestFile.length(); i++) {
            System.out.println(KeyStroke.getKeyStroke(pathToTestFile.charAt(i)) + " = "
                    + (int) pathToTestFile.charAt(i));
            if ((int) pathToTestFile.charAt(i) == 58) {
                robotil.pressKey(KeyEvent.VK_SHIFT);
                robotil.pressAndReleaseKey(KeyEvent.VK_SEMICOLON);
                robotil.releaseKey(KeyEvent.VK_SHIFT);
            }
            else {
                robotil.pressAndReleaseKey(KeyEvent.getExtendedKeyCodeForChar((int) pathToTestFile.charAt(i)));
            }
        }
        robotil.pressAndReleaseKey(KeyEvent.VK_ENTER);
        continueBool = false;
    }

当没有人登录时,是否有任何方法可以集中在浏览器上?

我相信使用上述策略,如果没有登录用户,您将无法完成此操作。所以我建议你使用一个更简单的解决方案。

你可以配置Firefox直接下载文件-文件类型和下载动作

如果您不想硬编码您的浏览器设置,您可以为您的测试设置一个特定的FF配置文件,在那里您可以配置您想要下载文件的位置。

FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.setPreference("browser.download.folderList",2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
firefoxProfile.setPreference("browser.download.dir","c:\downloads");
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");
WebDriver driver = new FirefoxDriver(firefoxProfile);
Chrome司机:

String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", chromePrefs);
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(cap);

相关内容

  • 没有找到相关文章

最新更新