Класс робота Selenium 2.0 на удаленном хосте
Я просто пишу тест, который должен загружать PDF-файлы через webApp(Да, я знаю, я не должен делать это на селене, но Вы знаете, Заказы.)
Что мне нужно?
Для разных сценариев мне нужно скачать другой pdf, переименовать его и поместить в пользовательский каталог. Итак, я должен справиться с системным модальным окном. Все отлично работает, поэтому тест запускается на удаленном хосте, и когда я нажимаю, чтобы загрузить файл, я обрабатываю модальное окно системы (я использовал пакет robotil, это расширенный класс робота, который позволяет нам использовать класс робота на удаленном хосте), поэтому я использую Класс robotil для ввода пути к файлу и имени файла в модальной системе, а затем нажмите "Enter" для подтверждения и сохранения файла. Это все, что мне нужно, и это работает, так в чем же проблема? здесь: SOMEONE должен быть зарегистрирован на удаленном хосте, если я захожу через rdp и смотрю на экран (и делаю мои вещи на моем хосте), то все замечательно, но для случая, когда никто не вошел в систему, это выглядит так во время тестов webbrowswer не имеют FOCUS, поэтому каждый раз, когда класс robotil выполняет какое-либо действие, это действие не фокусируется на web-браузере (как и должно быть).
тестовый класс:
@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;
}
Есть ли способ получить фокус на веб-браузере, когда никто не вошел в систему?
1 ответ
Я считаю, что, используя указанную стратегию, вы не сможете выполнить ее без авторизованного пользователя. Поэтому я предлагаю вам использовать более простое решение.
Вы можете настроить 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 Driver:
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);