Перейти к содержимому

Публикации DennisM

55 публикаций создано DennisM (учитываются публикации только с 17 апреля 2023)



#152582 isDisplayed=true но ElementNotFound

Отправлено автор: DennisM 11 июля 2016 - 13:57 в Selenium - Functional Testing

Столкнулся с регрессией. Компонент визуально скрыт, но WebDriver упорно отвечает, что isDisplayed=true, а при попытке .click() соответственно валится с ElementNotFound. Вот сам элемент

 

http://pastebin.com/bsVVTS9R

 

Сейчас переводим приложение на React, часть ещё на Angular, так что периодически всплывают такие вот интересные аномалии... 

Когда элемент виден, добавляется класс "show-dates", но, честно говоря, переделывать везде ожидание видимости на проверку наличия класса... это не наш метод. Да и не гарантирует он видимость-невидимость. Что делать, ребята? Пинать девелопера? Он клянётся, что всё работает как раньше на ангуляре, но по факту - нет.

 

Жди элемента по примеру:

 

import org.openqa.selenium.support.ui.ExpectedConditions;

import org.openqa.selenium.support.ui.WebDriverWait;

 

new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(ElementLocator));

 

или

 

new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(ElementLocator));

 

 

или проверяй boolean из

boolean visible = ExpectedConditions.visibilityOfElementLocated(ElementLocator);

 

не поможет, смотри другие проверки из ExpectedConditions




#152530 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 08 июля 2016 - 13:20 в Selenium - Functional Testing

Ееее!!! Победили зверя!
Если билдишь через Jenkins то можно запихать переменные в билд и перед выполнением выбирать папку для запуска, количество потоков, тэги.
 
<profile>
<id>CucumberAll</id>
<activation>
<property>
<name>environment</name>
<value>CucumberAll</value>
</property>
</activation>
 
 
<build>
<plugins>
<plugin>
<groupId>com.github.temyers</groupId>
<artifactId>cucumber-jvm-parallel-plugin</artifactId>
<version>1.3.0</version>
<executions>
<execution>
<id>generateRunners</id>
<phase>validate</phase>
<goals>
<goal>generateRunners</goal>
</goals>
<configuration>
<!-- Mandatory -->
<!-- comma separated list of package names to scan for glue code -->
<glue>com.expion.test.CucumberStepDefinition</glue>
<!-- These are the default values -->
<!-- Where to output the generated Junit tests -->
<outputDirectory>${project.build.directory}/generated-test-sources/cucumber</outputDirectory>
<!-- The diectory containing your feature files. -->
<featuresDirectory>src/test/resources/${env.TESTS_FOLDER}</featuresDirectory>
<!-- Directory where the cucumber report files shall be written -->
<cucumberOutputDir>c:/Jenkins/reports/</cucumberOutputDir>
<!-- comma separated list of output formats -->
<format>json</format>
<!-- CucumberOptions.strict property -->
<strict>true</strict>
<!-- CucumberOptions.monochrome property -->
<monochrome>true</monochrome>
<!-- The tags to run, maps to CucumberOptions.tags property -->
<tags>${env.TESTS_BY_TAGS}</tags>
<!-- If set to true, only feature files containing the required 
tags shall be generated. -->
<!-- Excluded tags (~@notMe) are ignored. -->
<filterFeaturesByTags>true</filterFeaturesByTags>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<forkCount>${env.TESTS_IN_PARALLEL}</forkCount>
<!-- <forkCount>2</forkCount> -->
<reuseForks>true</reuseForks>
<includes>
<include>**/*IT.class</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
 
</profile>



#152501 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 07 июля 2016 - 15:27 в Selenium - Functional Testing

 

 

Ух ёпт. У тебя эти таги не указаны!
Запиши:    <tags>@runTest</tags>
 
 
<configuration>
                            <!-- Mandatory -->
                            <!-- comma separated list of package names to scan for glue code -->
                            <glue>ru.StepDefinitions</glue>
                            <!-- These are the default values -->
                            <!-- Where to output the generated Junit tests -->
                            <outputDirectory>${project.build.directory}/generated-test-sources/cucumber</outputDirectory>
                            <!-- The diectory containing your feature files. -->
                            <featuresDirectory>src/test/Resorses/Features/</featuresDirectory>
                            <!-- Directory where the cucumber report files shall be written -->
                            <cucumberOutputDir>target/cucumber-parallel</cucumberOutputDir>
                            <!-- comma separated list of output formats -->
                            <format>html</format>
                            <!-- CucumberOptions.strict property -->
                            <strict>true</strict>
                            <!-- CucumberOptions.monochrome property -->
                            <monochrome>true</monochrome>
                            <!-- The tags to run, maps to CucumberOptions.tags property -->
                            <tags></tags>
                            <!-- If set to true, only feature files containing the required
                            tags shall be generated. -->
                            <!-- Excluded tags (~@notMe) are ignored. -->
                            <filterFeaturesByTags>true</filterFeaturesByTags>
                        </configuration>

 

 
В секцию добавил <tags>"@runTest"</tags>
Вот такая ошибка у меня возникла, которую я победить не смог (( 
ошибка была и ранее, когда настраивал по вашему сценарию
 
D:\git\AQC\test>mvn clean test
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for ru:rts-tender:jar:1.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-surefire-plugin @ line 104, column 21
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building rts-tender 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ rts-tender ---
[INFO] Deleting D:\git\AQC\test\target
[INFO]
[INFO] --- cucumber-jvm-parallel-plugin:1.3.0:generateRunners (generateRunners) @ rts-tender ---
[INFO] Adding D:\git\AQC\test\target\generated-test-sources\cucumber to test-compile source root
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ rts-tender ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\git\AQC\test\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ rts-tender ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 111 source files to D:\git\AQC\test\target\classes
[INFO] /D:/git/AQC/test/src/main/java/Helpers/UserProfiles/SupplierLegalEntityProfile.java: Some input files use unchecked or unsafe operations.
[INFO] /D:/git/AQC/test/src/main/java/Helpers/UserProfiles/SupplierLegalEntityProfile.java: Recompile with -Xlint:unchecked for details.
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ rts-tender ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\git\AQC\test\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.5.1:testCompile (default-testCompile) @ rts-tender ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 11 source files to D:\git\AQC\test\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.19.1:test (default-test) @ rts-tender ---
 
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
None of the features at [classpath:Features/AccreditationEntrepreneur.feature] matched the filters: [@runTest]
None of the features at [classpath:Features/FullAuction.feature] matched the filters: [@runTest]
 
0 Scenarios
0 Steps
0m0,000s
 
 
0 Scenarios
0 Steps
0m0,000s
 
 
Results :
 
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.258 s
[INFO] Finished at: 2016-07-07T18:14:18+03:00
[INFO] Final Memory: 26M/311M
[INFO] ------------------------------------------------------------------------

 

было такое. Проблема решилась перемещением файлов фичей в первую после resources папку (не далее). и переименуй всё в lowercase.  Плагин капризный! :)

\src\test\resources\cucumber\TestCase.feature




#152499 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 07 июля 2016 - 14:48 в Selenium - Functional Testing

Ух ёпт. У тебя эти таги не указаны!
Запиши:    <tags>@runTest</tags>
 
 
<configuration>
                            <!-- Mandatory -->
                            <!-- comma separated list of package names to scan for glue code -->
                            <glue>ru.StepDefinitions</glue>
                            <!-- These are the default values -->
                            <!-- Where to output the generated Junit tests -->
                            <outputDirectory>${project.build.directory}/generated-test-sources/cucumber</outputDirectory>
                            <!-- The diectory containing your feature files. -->
                            <featuresDirectory>src/test/Resorses/Features/</featuresDirectory>
                            <!-- Directory where the cucumber report files shall be written -->
                            <cucumberOutputDir>target/cucumber-parallel</cucumberOutputDir>
                            <!-- comma separated list of output formats -->
                            <format>html</format>
                            <!-- CucumberOptions.strict property -->
                            <strict>true</strict>
                            <!-- CucumberOptions.monochrome property -->
                            <monochrome>true</monochrome>
                            <!-- The tags to run, maps to CucumberOptions.tags property -->
                            <tags></tags>
                            <!-- If set to true, only feature files containing the required
                            tags shall be generated. -->
                            <!-- Excluded tags (~@notMe) are ignored. -->
                            <filterFeaturesByTags>true</filterFeaturesByTags>
                        </configuration>



#152498 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 07 июля 2016 - 14:41 в Selenium - Functional Testing

запусти без указания тагов и папки с тестами. В плагине в pom.xml таги и папка с фичами уже указаны

просто

mvn clean test




#152496 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 07 июля 2016 - 13:13 в Selenium - Functional Testing

У меня есть две (feateres)

@runTest
Feature: Accreditation Individual Entrepreneur

@runTest

Feature: User Create Auction

 

запуск произвожу через командную строку:

mvn test -Dcucumber.options="src/test/Resorses/Features --tags @runTest"

 

он мне запускает параллельно сценарий из Feature: Accreditation Individual Entrepreneur (в двух браузерах)

и после завершения из Feature: User Create Auction

 

а я можно сделать так чтоб одновременно запускался сценарий из Feature: Accreditation Individual Entrepreneur (в одном окне браузере) 

и Feature: User Create Auction в другом окне

Можешь дать структуру папки с фичами? И сами фичи?




#152470 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 06 июля 2016 - 13:42 в Selenium - Functional Testing

Всем привет, 

вопрос по поводу параллельного запуска тестов на cucumbere.

Как сделать одновременный запуск двух разных тестов из разных features?

Так выше же всё рассказано. Через профайл Maven. Всё работает.

По этому примеру всё из папки с Фичами собирается в кучу и запускается. Сколько файлов с Фичами, столько потоков.




#152374 Как записать действия без использования плагина рекордера?

Отправлено автор: DennisM 01 июля 2016 - 17:50 в Selenium - Functional Testing

Без рекордера только на бумажку шариковой ручкой (карандашом если для дебага).




#152312 Jenkins обмен переменными между Jobs

Отправлено автор: DennisM 29 июня 2016 - 17:50 в Автоматизированное тестирование

Строим билд.

Имеется Jenkins master сервер и 2 Jenkins node (Windows, Linux). Вручную всё билдится.

Вручную, потому что нужно перенести некоторые данные из одного билда в другой. Скопировать несколько переменных. VM ip например.
Есть у кого опыт с генерированием значения в переменную во время билда и запуск второго с этим значением?

 




#152310 Не скроллится экран при попытке клика на элемент

Отправлено автор: DennisM 29 июня 2016 - 15:39 в Selenium - Functional Testing

Были такие грабли. Скроллится отлично этим:

 

import org.openqa.selenium.interactions.Actions;

 

***

 

Actions mouse = new Actions(driver);

mouse.moveToElement(driver.findElement(element_locator)).build().perform();  




#151679 Локатор для кнопки попапа с динамическим ID

Отправлено автор: DennisM 02 июня 2016 - 13:36 в Selenium - Functional Testing

Вот что лень делает с тестировщиками... ID еще подавай с голубой каемочкой. Девелоперам без вас хватает мозготр!@%а. ;)




#151551 Не находится элемент для события click().

Отправлено автор: DennisM 27 мая 2016 - 16:08 в Selenium - Functional Testing

 

Код:

 

            waitmis.Until(ExpectedConditions.ElementExists(By.XPath("//html/body/div[1]/div[1]/ul/li[1]/ul/li[2]/a")));
            var search = Driver.FindElement(By.XPath("//html/body/div[1]/div[1]/ul/li[1]/ul/li[2]/a"));
 

 

 

За такие XPath нужно линейкой по пальцам бить!




#151308 Взаимодействие с элементом у которого style="display:none;". И

Отправлено автор: DennisM 19 мая 2016 - 15:30 в Selenium - Functional Testing

Юзайте Actions

В соседней теме уже обьяснял:

http://software-test...nium-webdriver/

 

Бывает что на странице элементы не Select и не могут инициализироваться пока не выпадут из меню. В селениуме есть Actions.

 

Webelement menu= driver.findElement(By.xpath("//div[@class='меню.Иконка из которой всё выпадает']/a")); //меню. Иконка из которой всё выпадает

Actions mouse = new Actions(driver);

//Двигаем мышь на меню и зависаем над ним. Меню вываливается.
mouse.moveToElement(menu).build().perform();  

//mouse.moveToElement(menu).click().build().perform(); - если надо кликнуть а не висеть над меню

 

//Кликаем по опции из списка. 

Webelement item= driver.findElement(By.xpath("//div[@class='Элемент меню из списка']/a")); //Элемент меню из списка

mouse.moveToElement(item).click().build().perform();
 

//или тут уже сам Webdriver может найти и кликнуть

//item.click();




#150432 Локатор для кнопки попапа с динамическим ID

Отправлено автор: DennisM 14 апреля 2016 - 13:52 в Selenium - Functional Testing

Вполне может быть что у тебя в коде несколько окон и на данный момент теста только одно видимое. Добавляем условие contains(@style, 'display: block')

 

//div[contains(@id, 'popup') AND contains(@style, 'display: block')]//div[@class="buttons"]/button[text()='OK']




#150431 Локатор для кнопки попапа с динамическим ID

Отправлено автор: DennisM 14 апреля 2016 - 13:47 в Selenium - Functional Testing

 

 

Нефиг тут бюрократию ворошить. Хуже будет!
 
Вот несколько примеров:
 

//div[contains(@id, 'popup') AND @class="buttons"]/button[text()='OK']

//div[@class="buttons"]/button[text()='OK']

//div[@class="buttons"]/button[1]

 

Спасибо за примеры! По всем 3-м к сожалению находится ещё 3-5 вариантов, соответственно локатор ссылается не на то что нужно. Пока честно говоря не знаю что делать, т.к. сроки есть, а разумным решением видится действительно продавливание разработчиков в сторону статичных id

 

я не вижу кода всей страницы. Можно было бы сочинить что-нибудь точнее.




#150429 Локатор для кнопки попапа с динамическим ID

Отправлено автор: DennisM 14 апреля 2016 - 13:38 в Selenium - Functional Testing

 

Нефиг тут бюрократию ворошить. Хуже будет!

Окей, продолжаем увлекательный забег по граблям :)

 

У меня на проекте нет вообще id и всё работает норм. Те кто требуют id или неопытные или ленивые... ;)




#150427 Локатор для кнопки попапа с динамическим ID

Отправлено автор: DennisM 14 апреля 2016 - 13:16 в Selenium - Functional Testing

Нефиг тут бюрократию ворошить. Хуже будет!
 
Вот несколько примеров:
 

//div[contains(@id, 'popup') AND @class="buttons"]/button[text()='OK']

//div[@class="buttons"]/button[text()='OK']

//div[@class="buttons"]/button[1]




#150050 Поиск элемента, если в class содержится несколько слов, разделенных пр

Отправлено автор: DennisM 04 апреля 2016 - 14:26 в Selenium - Functional Testing

//div[@class='headline']//h1

//div[contains(@class,'headline')]//h1[contains(@class,'title')]

//div[contains(@class,'product-card')]//h1[contains(@class,'title')]

И т.д.... :)




#150048 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 04 апреля 2016 - 14:19 в Selenium - Functional Testing

Только после этого файл выглядит кучей мусора т.к. всё одновременно кидается в кучу. 
У них для этого запилен еще один плагин.
Пошел за бубном.. :)



#150047 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 04 апреля 2016 - 14:16 в Selenium - Functional Testing

Вообщем получилось вроде. 
С момента последней статьи они дописали плагин:
<dependency>
<groupId>com.github.temyers</groupId>
<artifactId>cucumber-jvm-parallel-plugin</artifactId>
<version>1.1.0</version>
</dependency>
 
 
В тестах огурца мы обязанны делать аннотации. По ним оно определяет что пускать в параллели.
Плагин генерит пачку:
Parallel01IT.class
Parallel02IT.class
Parallel03IT.class
...
Parallel**IT.class
 
Потом уже на эту пачку натравливаем maven-surefire-plugin
В котором параллелим:
<forkCount>5</forkCount>
 
И после таких наворотов похоже нам не нужен раннер класс для огурца. Оно само все навернёт...
 
В итоге билд выглядит так. Ключевые моменты я подсветил. Надеюсь это будет кому-нибудь полезно. :)
 
<build>
<plugins>
<plugin>
<groupId>com.github.temyers</groupId>
<artifactId>cucumber-jvm-parallel-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<id>generateRunners</id>
<phase>validate</phase>
<goals>
<goal>generateRunners</goal>
</goals>
<configuration>
<!-- Mandatory -->
<!-- comma separated list of package names to scan for glue code -->
<glue>com.company.test.CucumberStepDefinition</glue>
<!-- These are the default values -->
<!-- Where to output the generated Junit tests -->
<outputDirectory>${project.build.directory}/generated-test-sources/cucumber</outputDirectory>
<!-- The diectory containing your feature files. -->
<featuresDirectory>src/test/resources/cucumber/</featuresDirectory>
<!-- Directory where the cucumber report files shall be written -->
<cucumberOutputDir>target/cucumber-parallel</cucumberOutputDir>
<!-- comma separated list of output formats -->
<format>html</format>
<!-- CucumberOptions.strict property -->
<strict>true</strict>
<!-- CucumberOptions.monochrome property -->
<monochrome>true</monochrome>
<!-- The tags to run, maps to CucumberOptions.tags property -->
<tags>"@toTest"</tags>
<!-- If set to true, only feature files containing the required 
tags shall be generated. -->
<!-- Excluded tags (~@notMe) are ignored. -->
<filterFeaturesByTags>true</filterFeaturesByTags>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<forkCount>5</forkCount>
<reuseForks>true</reuseForks>
<includes>
<include>**/*IT.class</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>



#150046 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 04 апреля 2016 - 14:01 в Selenium - Functional Testing

C огурцом особенно не связывался, поэтому не могу ничего посоветовать, но селениум тут точно ни при чём. За параллельный запуск он не отвечает. А гуглить пытались?

Вот какой-то пример сразу https://opencredo.co...ts-in-parallel/

Этот вариант похоже единственный в инете. Именно по этой ссылке всё устарело. Танцую с бубном второй день вокруг этой статьи. :)

Вот его обновление:

https://opencredo.co...test-execution/

Также код:

https://github.com/o...tion-quickstart




#150044 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 04 апреля 2016 - 13:26 в Selenium - Functional Testing

при чём тут селениум?

Под огурцом запускается Селениум если что. В Maven запускает селениум maven-surefire-plugin. И именно тут возникают проблемы.
Неужели никто не пытался параллелить Selenium - Cucumber тесты?



#150000 Запуск Cucumber тестов в параллели?

Отправлено автор: DennisM 01 апреля 2016 - 17:17 в Selenium - Functional Testing

С Junit всё просто. В Maven ставим это и всё ок.

 

<plugins>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>**/Test.java</include>
</includes>
<parallel>all</parallel>
<runOrder>random</runOrder>
<useUnlimitedThreads>true</useUnlimitedThreads>
<parallelOptimized>true</parallelOptimized>
<argLine>-Xmx512m -XX:MaxPermSize=256m</argLine>
</configuration>
</plugin>
 
</plugins>

 

То же самое с Cucumber не проходит. Всё время 1 Thread...




#149586 Как выбрать нужный елемент

Отправлено автор: DennisM 18 марта 2016 - 15:14 в Selenium - Functional Testing

вот

Вот по этому не люблю PageFactory! :)

Меняй Xpath в самом методе PageObject

Прикрепленные изображения

  • post-36797-0-11564200-1458119992.jpg



#149316 Что дает использование PageFactory?

Отправлено автор: DennisM 11 марта 2016 - 20:33 в Selenium - Functional Testing

По опыту оно приносит больше вреда чем пользы. На соседнем проекте использовали это. Потом посмотрели на наш автомейшн и забили на PageFactory.
PageObject надо использовать, PageFactory нет..