Releases: open-tool/ultron
2.5.0-alpha16
What's Changed
- Fix allure step with assertion (#89) by @alex-tiurin in #91
Full Changelog: 2.5.0-alpha15...2.5.0-alpha16
2.5.0-alpha15
What's Changed
- Refresh SemanticsNodeInteraction provider state by @alex-tiurin in #86
Full Changelog: 2.5.0-alpha14...2.5.0-alpha15
2.5.0-alpha14
What's Changed
- Add
runDesktopUltronUiTest
method by @alex-tiurin in #83 - open
UltronAllureTestRunner
class for extension by @alex-tiurin in #84
Full Changelog: 2.5.0-alpha12...2.5.0-alpha14
2.5.0-alpha12
What's Changed
- downgrade java to 11 by @alex-tiurin in #82
Full Changelog: 2.5.0-alpha11...2.5.0-alpha12
2.5.0-alpha11
What's Changed
- update espresso to 3.6.1 by @alex-tiurin in #79
- Assert Is Indeterminate for Compose Ultron by @Darocs in #78
- Fix Compose recommended config by @alex-tiurin in #80
New Contributors
Full Changelog: 2.5.0-alpha09...2.5.0-alpha11
2.5.0-alpha09
What's Changed
- Update libs by @alex-tiurin in #65
- Kotlin Multiplatform Support by @alex-tiurin in #72, #73, #74
- Feature/66 unmerged tree config by @alex-tiurin in #75
Full Changelog: 2.3.5...2.5.0-alpha09
2.3.5
What's Changed
- Custom Allure directory in #61
By default Allure results are saved in /data/data/<package_name>/files/allure-results
.
It's possible to set a custom directory. Make sure application has WRITE permission to the directory.
UltronAllureConfig.setAllureResultsDirectory(File("directory_path"))
UltronAllureConfig.setAllureResultsDirectory(Environment.DIRECTORY_DOCUMENTS)
UltronAllureConfig.setAllureResultsDirectory() // set Environment.DIRECTORY_DOWNLOADS as target directory
If custom directory is specified allure results artifacts are copied to the desired directory at the end of test run.
If no parameters are provided to UltronAllureConfig.setAllureResultsDirectory()
then you can pull artifacts from /sdcard/Download/allure-results
.
- Fix RecyclerView item search in #62
Full Changelog: 2.3.3...2.3.5
2.3.3
Compose List & RecyclerView Item Child improvements in #60
- ComposeListItem child
old syntax:
class CustomListItem : UltronComposeListItem() {
val status by lazy { getChild(hasTestTag(contactStatusTestTag)) }
}
new:
class CustomListItem : UltronComposeListItem() {
val name by child { hasTestTag(contactNameTestTag) }
}
You can use both ways at the same time:
class CustomListItem : UltronComposeListItem() {
val name by child { hasTestTag(contactNameTestTag) }
val status by lazy { getChild(hasTestTag(contactStatusTestTag)) }
}
- RecyclerViewItem child
Old syntax:
class CustomRecyclerItem : UltronRecyclerViewItem() {
val name by lazy { getChild(withId(R.id.tv_name)) }
}
New:
class CustomRecyclerItem : UltronRecyclerViewItem() {
val name by child { withId(R.id.tv_name) }
}
You can use both ways at the same time:
class CustomRecyclerItem : UltronRecyclerViewItem() {
val name by child { withId(R.id.tv_name) }
val status by lazy { getChild(withId(R.id.tv_status)) }
}
Full Changelog: 2.3.2...2.3.3
2.3.2
What's Changed
Compose LazyList improvements in #59
Add
- new methods to interact with LazyList item by position:
firstItem()
item(position: Int)
getItem(position: Int): T
getFirstItem(): T
to use these methods you have to configure positionPropertyKey
in application code and specify it in composeList
declaration.
composeList(marcher =..., positionPropertyKey = ListItemPositionPropertyKey)
Read new wiki page for details - Efficient Strategies for Locating Items in Compose LazyList
- new method for
UltronComposeList
fun assertItemDoesNotExist(itemMatcher: SemanticsMatcher)
Removed
method UltronComposeListItem().assertDoesNotExist()
Full Changelog: 2.3.1...2.3.2
2.3.1
What's Changed
- #49 Custom name for matcher object for Espresso, UiAutomator, Compose by @alex-tiurin in #57
- #50 meta info by @alex-tiurin in #57
There are 2 new general methods:
withName(name: String)
withMetaInfo(meta: Any)
By default name
is used in exceptions messages.
These data also could be used in listeners and result analyzers:
class MetaListener: UltronLifecycleListener(){
override fun afterFailure(operationResult: OperationResult<Operation>) {
val name = operationResult.operation.elementInfo.name
val metaInfo = operationResult.operation.elementInfo.meta
}
}
Full Changelog: 2.3.0...2.3.1