QA Automation Блог

Как заставить TestNG и ANT разговаривать по русски

Вчера мучался с этим полдня, обгуглился до дрожи в пальцах, но так и не нашел решение. TestNG при запуске через IDEA и своих отчетах выдавал мне ??? вместо русских букв. Самый фак был ещё и в том, что в testng.xml присутствовали параметры на русском языке и ничего не работало. Докопался до того, что при запуске сборки Ant она сама запускает JVM со своими параметрами, такими как classpath и ea (enable assertions), но как туда впихнуть -Dfile.encoding=UTF-8 ?

Оказывается, в таргете внутри ant.xml нужно всего лишь указать следующее (см. строку 4):

<target name="test" depends="compile">  
    <testng outputdir="${testdir}" classpathref="all.classpath" haltOnFailure="true">  
        <xmlfileset dir="${basedir}" includes="testng.xml"/>  
        <jvmarg value="-Dfile.encoding=UTF-8" />  
    </testng>  
</target>


Как в TestNG передавать переменные между файлами классов

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

Записываем данные:

@Test(description="Найти код")  
public void check(ITestContext context) {  
    data = SomeClass.doSomething(driver, data, config);  
    context.setAttribute("myVariable", data);  
}

Читаем их в другом классе:

@Test(description="test2")  
public void test2(ITestContext context) {  
    String data = (String) context.getAttribute("myVariable");  
}

Как с помошью Selenium зааплодить файл в невидимый инпут

Нужно сначала его сделать видимым. Вот функция, которая принимает xpath инпута и драйвер, инициализированный ранее, и удаляет все классы:

public static void jsDeleteClasses(String xpath, WebDriver driver) throws InterruptedException {  
    JavascriptExecutor js = (JavascriptExecutor) driver;  
    String script = "document.evaluate(\""+xpath+"\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)" +  
            ".singleNodeValue.setAttribute('class', '');";  
    js.executeScript(script);  
}

Можно переделать чтоб удаляла атрибут style, например.

Страницы