From 16c541b10d1f878f515606eca532db7d0e213f5a Mon Sep 17 00:00:00 2001 From: Ashby Thorpe Date: Sun, 31 Dec 2023 16:10:54 +0000 Subject: [PATCH] Make element_value() more reliable --- R/properties.R | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/R/properties.R b/R/properties.R index 22971c34..276be438 100644 --- a/R/properties.R +++ b/R/properties.R @@ -275,7 +275,39 @@ elem_value <- function(x, ptype = character(), timeout = NULL) { } element_value <- function(x, session, driver) { - execute_js_fn_on("x => x.value", x, session = session, driver = driver) + type <- element_input_type(x, session = session, driver = driver) + + if (type == "select") { + element_select_value(x, session = session, driver = driver) + } else if (type == "contenteditable") { + element_text(x, session = session, driver = driver) + } else { + execute_js_fn_on("x => x.value", x, session = session, driver = driver) + } +} + +element_select_value <- function(x, session, driver) { + result <- execute_js_fn_on("function(x) { + if (x.type == 'select-one') { + return x.options[x.selectedIndex].value; + } else { + let result = []; + + for (let i = 0; i < x.options.length; i++) { + if (x.options[i].selected) { + result.push(x.options[i].value); + } + } + + return result; + } + }", x, session = session, driver = driver) + + if (is.list(result)) { + unlist(result) + } else { + result + } } convert_value <- function(x, ptype) {