Как определить, выполняются ли тесты локально или на удаленном сервере - PullRequest
0 голосов
/ 14 сентября 2018

Согласно этому учебнику , я могу загружать файлы на веб-сайт, пока выполняю свои тесты локально и на удаленном сервере.


Как в учебнике это:

Для тех из вас, кто делает это локально, все, что вам нужно сделать, это использовать Команда sendKeys для ввода локального пути к файлу в любом поле файла. Это работает как шарм во всех драйверах. При перемещении этого теста в удаленный сервер (такой как, например, наш Selenium 2 Cloud), все вы нужно сделать, это использовать метод setFileDetector, чтобы сообщить WebDriver что вы загружаете файлы с локального компьютера на удаленный сервер вместо простого ввода пути.

на удаленном сервере я должен использовать:

driver.setFileDetector(new LocalFileDetector());
...
upload.sendKeys("/Path/to/image.jpg");

и местные просто:

upload.sendKeys("/Path/to/image.jpg");

И все это прекрасно работает. Только проблема в том, что нет информации, как определить, выполняются ли мои тесты локально или на удаленном сервере.


Я попытался определить экземпляр webDriver:

WebDriver proxiedWebDriver = ((WebDriverFacade) getDriver()).getProxiedDriver();
if (proxiedWebDriver instanceof RemoteWebDriver) {
    ((RemoteWebDriver)proxiedWebDriver).setFileDetector(new LocalFileDetector());
}

но похоже, что оба (локальный и удаленный) дела используют RemoteWebDriver во время работы, потому что в каждом случае я пропускаю if условие.

Как определить, выполняются ли мои тесты локально или удаленно?

1 Ответ

0 голосов
/ 14 сентября 2018

Чтобы получить адрес удаленного сервера, вы можете использовать HttpCommandExecutor следующим образом:

HttpCommandExecutor ce = (HttpCommandExecutor) ((RemoteWebDriver)driver).getCommandExecutor();
String remoteAddress = ce.getAddressOfRemoteServer().toString();
String localAddress = null;

try (Socket socket = new Socket()) {
    socket.connect(new InetSocketAddress("google.com", 80));
    localAddress = socket.getLocalAddress().getHostAddress();
} catch (IOException e) {
    e.printStackTrace();
}

if (remoteAddress.contains("localhost") || remoteAddress.contains(localAddress)) System.out.println("Local machine");
else System.out.println("Remote machine");

Приведенный выше код получает адрес удаленного сервера (HUB) и сравнивает его с вашим общедоступным IP-адресом.Он должен дать вам информацию, если вы используете локальный или удаленный сервер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...