Пользовательские capabilities и Selenium GRID
Selenium GRID умеет работать со следующими capabilities:
- Platform
- Browser name
- version (Browser version)
- applicationName (недокументированная capability)
Но что делать, если у устройств, на которых запускаются тесты, больше свойств, и вы хотите фильтровать запуск тестов по этим свойствам? Давайте разберемся. К примеру, на у телефонов есть размер экрана и архитектура процессора.
Реализуем свой матчер для дополнительных capabilities: MobileCapabilityMatcher.java
public class MobileCapabilityMatcher extends DefaultCapabilityMatcher {
private final List<String> capabilities = new ArrayList<String>() ;
@Override
public boolean matches(Map<String, Object> nodeCapability, Map<String, Object> requestedCapability) {
boolean basicChecks = super.matches(nodeCapability, requestedCapability);
boolean mobileChecks = true;
if (!containsSomeKeys(requestedCapability)){
return basicChecks;
}
for (String capability : capabilities) {
if (requestedCapability.containsKey(capability)) {
mobileChecks &= nodeCapability.get(capability).equals(requestedCapability.get(capability));
}
}
return (basicChecks && mobileChecks);
}
private boolean containsSomeKeys(Map<String, Object> map) {
boolean contains = false;
for (String capability : capabilities) {
contains |= map.containsKey(capability);
}
return contains;
}
}
Создадим pom.xml для сборки:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>om.yourcompany.packagename</groupId>
<artifactId>mobilegridcapabilities</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>2.46.0</version>
</dependency>
</dependencies>
</project>
Соберем матчер
mvn clean package
Создадим файл конфигурации: hubconfig.json
{
"capabilityMatcher": "com.yourcompany.packagename.MobileCapabilityMatcher",
"throwOnCapabilityNotPresent": true
}
Файл конфигурации и собранный матчер положим в один каталог с Selenium GRID. Всё, теперь можно запускать хаб:
java -jar selenium-server-standalone-2.46.0.jar -role hub -hubConfig hubconfig.json
Не забудьте указать в файлах конфигурации нод значения добавленных свойств.
P.S. по мотивам статьи