为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
守候你守候我 2021-09-10 21:00:23
这是关于golang selenium webdriver 的问题。是否有任何函数仅在某些 js 代码返回 true 后返回。var session *webdriver.Session...session.waitForJs(`$('#redButton').css('color')=='red'`)// next code should be executed only after `#redButton` becomes red问题是该方法session.waitForJs不存在。
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

我在与 Selenium 的 golang 绑定中看不到任何等待函数,因此您很可能需要定义自己的等待函数。这是我第一次尝试 golang,所以请耐心等待:


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)

    }

}

有两个选项可以定义elementCondition. 您使用 Javascript 的方法看起来可以与webdriver.go 中ExecuteScript记录的函数一起使用


// 将一段 JavaScript 代码注入页面,以便在当前选定框架的上下文中执行。假设执行的脚本是同步的,并且评估脚本的结果将返回给客户端。


另一种方法是通过 Selenium 访问元素属性


func ButtonIsRed(WebElement e) (bool) {

    return (e.GetCssProperty('color') == 'red')

}

所以你的代码会变成


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)


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 310 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信