说明:wd变量是selenium.WebDriver接口
**问题1:**有的网站会有这种容器的标签,当我们使用FindElement()方法获取这个容器里的标签时往往是不能直接这样取元素的。
我的解决是需要先进入容器里,使用方法步骤
1.先中<iframe>标签,比如有id可以这样:
jie3, err := wd.FindElement(selenium.ByCSSSelector, "#iframe-center")
2.获取后然后进入容器:
if err = wd.SwitchFrame(jie3); err != nil {
panic(err)
}
切换到容器里我们就可以获取容器里的html标签了。
**问题2:**当我们使用MoveTo(10, 10) 方法时,运行时可能会有W3C的错误,它不支持W3C,因此我们需要关闭:
//为谷歌游览器添加属性,这里关闭w3c,因为moveto方法需要关闭这个
caps := selenium.Capabilities{
"browserName": "chrome",
}
chromecaps := chrome.Capabilities{
W3C: false,
}
caps.AddChrome(chromecaps)
wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port))
if err != nil {
panic(err)
}
问题3:特殊情况我们可能需要在游览器执行js脚本
wd.ExecuteScript("alert('这是一个测试弹框')", nil)
time.Sleep(2 * time.Second)
wd.AcceptAlert()
有时候我们需要移除某些元素属性:
js命令:document.getElementsByClassName('ant-input')[1].removeAttribute('placeholder')
问题4: 有时候使用 .Clear()函数不能清楚文本框的文本,我们可以使用组合建清理,比如:
ctrl+A 全选后再Backspace删除。
//输入框全选建
if err = elems[0].SendKeys(selenium.ControlKey + "A"); err != nil {
panic(err)
}
//删除输入框文本
if err = elems[0].SendKeys(selenium.DeleteKey); err != nil {
panic(err)
}
问题5: 点击导航栏后会打开一个新的web窗口,此时要切换到新的窗口在执行后续定位元素的操作(虽然游览器跳转了,但selenium的上下文还是上个窗口的),否则将找不到元素。
通过这个可以获取当前窗口的句柄
winid, err := wd.CurrentWindowHandle()
获取所有窗口句柄,返回一个切片:
winids, _ := wd.WindowHandles()
//通过返回的切片,切换窗口
wd.SwitchWindow(winids[1])
此时可以打印下当前窗口,查看是否切换成功。也可以用wd.Close()关闭当前窗口来测试。