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

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


Как и в учебнике:

Для тех из вас, кто делает это локально, все, что вам нужно сделать, это использовать команду 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.

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


person Andrei Suvorkov    schedule 14.09.2018    source источник
comment
вы можете отлаживать код, видеть, куда он идет, проверять журналы, вы можете принудительно оставаться локальным, имитируя службы или предоставляя локальные конечные точки в файлах свойств теста, ...   -  person Stultuske    schedule 14.09.2018
comment
Вам нужен адрес концентратора или узлов?   -  person Fenio    schedule 14.09.2018
comment
@ RafałLaskowski адреса, я думаю, будет достаточно.   -  person Andrei Suvorkov    schedule 14.09.2018
comment
@AndreiSuvorkov Проверьте мой ответ и дайте мне знать, если он полезен   -  person Fenio    schedule 14.09.2018


Ответы (1)


Чтобы получить адрес удаленного сервера, вы можете использовать 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-адресом. Он должен предоставить вам информацию, если вы используете локальный или удаленный сервер.

person Fenio    schedule 14.09.2018
comment
А затем сравните его с вашим локальным IP-адресом. - person Fenio; 14.09.2018
comment
@AndreiSuvorkov Я все равно отредактирую свой ответ и предоставлю способ сравнения IP-адресов. Дай мне минуту - person Fenio; 14.09.2018
comment
@AndreiSuvorkov Проверьте расширенное решение :) - person Fenio; 14.09.2018
comment
Я думаю, мы могли бы также проверить локальный IP-адрес, на всякий случай, но я думаю, что любой, кому нужно такое решение, будет знать, как проверить локальный IP-адрес. - person Fenio; 14.09.2018