golang selenium 框架使用问题总结

说明: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()关闭当前窗口来测试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang 中可以使用 Selenium 来进行自动化测试、爬虫等相关工作。下面是一个简单的示例代码: ```go package main import ( "fmt" "time" "github.com/tebeka/selenium" "github.com/tebeka/selenium/chrome" ) func main() { // 启动 Chrome 浏览器 opts := []selenium.ServiceOption{ selenium.ChromeDriver("path/to/chromedriver"), // chromedriver 的路径 } service, err := selenium.NewChromeDriverService("path/to/chromedriver", 9515, opts...) if err != nil { panic(err) } defer service.Stop() // 设置 ChromeOptions chromeCaps := chrome.Capabilities{ Path: "", Args: []string{ "--headless", // 无头模式 "--disable-gpu", "--no-sandbox", "--disable-dev-shm-usage", "--disable-extensions", "--disable-infobars", "--disable-browser-side-navigation", "--disable-setuid-sandbox", "--disable-web-security", "--user-data-dir=/tmp", }, } // 启动 Chrome 浏览器 wd, err := selenium.NewRemote(chromeCaps, "") if err != nil { panic(err) } defer wd.Quit() // 打开页面 if err := wd.Get("http://www.baidu.com"); err != nil { panic(err) } // 输入搜索关键字 searchBox, err := wd.FindElement(selenium.ByCSSSelector, "#kw") if err != nil { panic(err) } if err = searchBox.SendKeys("golang selenium"); err != nil { panic(err) } // 点击搜索按钮 searchBtn, err := wd.FindElement(selenium.ByCSSSelector, "#su") if err != nil { panic(err) } if err = searchBtn.Click(); err != nil { panic(err) } // 等待搜索结果加载完毕 time.Sleep(time.Second * 5) // 获取搜索结果标题 titles, err := wd.FindElements(selenium.ByCSSSelector, "h3") if err != nil { panic(err) } for _, title := range titles { text, err := title.Text() if err != nil { panic(err) } fmt.Println(text) } } ``` 需要注意的是,需要先安装 Chrome 浏览器和对应版本的 chromedriver,并将其路径添加到系统 PATH 中。另外,还需要安装 selenium 和 chrome 这两个 Golang 的第三方包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值