All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.siwenyan.si.SiUiSelect Maven / Gradle / Ivy

There is a newer version: 1.25.1.0
Show newest version
package com.github.siwenyan.si;

import org.openqa.selenium.ElementNotInteractableException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Select;

public class SiUiSelect {

    private final WebElement element;
    private final Select select;
    private final SiContext siContext;


    public SiUiSelect(WebElement element, SiContext siContext) {
        this.siContext = siContext;
        this.element = element;
        this.select = new Select(element);
    }

    public void select(String optionExpression) throws SiWebDriverException {
        if (!optionExpression.contains("=")) {
            optionExpression = "label=" + optionExpression;
        }

        String[] p = optionExpression.split("=", 2);
        try {
            switch (p[0]) {
                case "label":
                    this.select.selectByVisibleText(p[1]);
                    break;
                case "value":
                    this.select.selectByValue(p[1]);
                    break;
                case "index":
                    this.select.selectByIndex(Integer.parseInt(p[1]));
                    break;
                default:
                    throw new RuntimeException("Unsupported option type: " + p[0]);
            }
        } catch (ElementNotInteractableException e) {
            siContext.getReporter().reportMessage("Using javascript...");
            String jsf = "";
            jsf += "var theElement = document.getElementById('%s');             ";
            jsf += "var theOptions = theElement.getElementsByTagName('option'); ";
            jsf += "for(var i = 0; i < theOptions.length; i++) {                ";
            jsf += "    if(%s) {                                                ";
            jsf += "        theOptions[i].selected = 'selected';                ";
            jsf += "        break;                                              ";
            jsf += "    }                                                       ";
            jsf += "}                                                           ";
            jsf += "theElement.onchange();                                      ";

            String id = element.getAttribute("id");
            String condition = "";
            switch (p[0]) {
                case "label":
                    condition = "'" + p[1] + "' == theOptions[i].text";
                    break;
                case "value":
                    condition = "'" + p[1] + "' == theOptions[i].getAttribute('value')";
                    break;
                case "index":
                    condition = Integer.parseInt(p[1]) + " == i";
                    break;
                default:
                    throw new RuntimeException("Unsupported option type: " + p[0]);
            }

            String js = String.format(jsf, id, condition);
            this.siContext.asJavascriptExecutor().executeScript(js);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy