Skip to content

Commit 49548ed

Browse files
committed
adding sendKeysWithSpecialChars (jvm only) + sendFiles to Element
1 parent 559d07e commit 49548ed

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

core/src/commonMain/kotlin/dev/kdriver/core/dom/Element.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ data class Element(
105105
)
106106
}
107107

108+
suspend fun sendFiles(paths: List<String>) {
109+
tab.dom.setFileInputFiles(
110+
files = paths,
111+
backendNodeId = backendNodeId,
112+
objectId = objectId,
113+
)
114+
}
115+
108116
suspend fun apply(jsFunction: String): JsonElement? {
109117
remoteObject = tab.dom.resolveNode(backendNodeId = backendNodeId).`object`
110118

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.kdriver.core.extensions
2+
3+
import dev.kdriver.cdp.domain.input
4+
import dev.kdriver.core.dom.Element
5+
6+
suspend fun Element.sendKeysWithSpecialChars(text: String) {
7+
apply("(elem) => elem.focus()")
8+
for (cluster in text.graphemeClusters()) {
9+
if (cluster.all { it.code in 32..126 }) {
10+
sendKeys(cluster)
11+
} else {
12+
tab.input.insertText(cluster)
13+
}
14+
}
15+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package dev.kdriver.core.extensions
2+
3+
import java.text.BreakIterator
4+
5+
fun String.graphemeClusters(): List<String> = BreakIterator.getCharacterInstance().let { breakIterator ->
6+
breakIterator.setText(this)
7+
val result = mutableListOf<String>()
8+
var start = breakIterator.first()
9+
var end = breakIterator.next()
10+
while (end != BreakIterator.DONE) {
11+
result.add(this.substring(start, end))
12+
start = end
13+
end = breakIterator.next()
14+
}
15+
result
16+
}

0 commit comments

Comments
 (0)