任何waitForJs函数等待一些javascript代码返回true

This is question about golang selenium webdriver.

Is there any function that returns only after some js code return true.

var session *webdriver.Session
...
session.waitForJs(`$('#redButton').css('color')=='red'`)
// next code should be executed only after `#redButton` becomes red

The problem is that method session.waitForJs do not exist.

I don't see any wait functions in the golang bindings to Selenium, so you'll most likely need to define your own. This is my first attempt at golang, so bear with me:

type elementCondition func(e WebElement) bool

// Function returns once timeout has expired or the element condition is true
func (e WebElement) WaitForCondition(fn elementCondition, int timeOut) {

    // Loop if the element condition is not true
    for i:= 0; !elementCondition(e) && i < timeOut; i++ {
        time.sleep(1000)
    }
}

There are two options to define the elementCondition. Your method of using Javascript looks like it could work with the ExecuteScript function documented in webdriver.go

// Inject a snippet of JavaScript into the page for execution in the context of the currently selected frame. The executed script is assumed to be synchronous and the result of evaluating the script is returned to the client.

An alternative is to access the element properties through Selenium

func ButtonIsRed(WebElement e) (bool) {
    return (e.GetCssProperty('color') == 'red')
}

So your code would become

var session *webdriver.Session
....
// Locate the button with a css selector
var webElement := session.FindElement(CSS_Selector, '#redButton')
// Wait for the button to be red
webElement.WaitForCondition(ButtonIsRed, 10)