51Testing软件测试论坛

标题: 问一下webdriver的execute_script功能 [打印本页]

作者: xiaodanfeng520    时间: 2015-3-11 18:38
标题: 问一下webdriver的execute_script功能
本帖最后由 xiaodanfeng520 于 2015-3-11 18:40 编辑

请问问用python写自动化脚本,代码如下:
url="xxxxxx"
driver = webdriver.Firefox()
driver.get(url)

js="return $('.content li .list_desc .list_dtitle').eq(0).find('a')";
driver.execute_script(js).click();

为啥我在浏览器里面执行javascript语句后,能返回正确的链接。但是却无法执行click动作,打印脚本返回的值 却没有结果?
print driver.execute_script(js)

用java语言我执行过,没有问题,熟悉python的帮忙指导一下

作者: xiaodanfeng520    时间: 2015-3-12 09:21
再把代码贴一下,不知道为啥这个显示黑块?

url="xxxxxx"
driver = webdriver.Firefox()
driver.get(url)

js="return $('.content li .list_desc .list_dtitle').eq(0).find('a')";
driver.execute_script(js).click();
作者: ermine    时间: 2015-3-12 13:24
driver.execute_script会返回一个列表

#示例
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.douban.com")

movie = driver.execute_script("return $('.lnk-movie')")
movie[0].click()
作者: xiaodanfeng520    时间: 2015-3-12 17:14
ermine 发表于 2015-3-12 13:24
driver.execute_script会返回一个列表

#示例

谢谢你,我按照你的方法试了一下,不过好像不能执行成功,不知道是不是没有登录豆瓣,我没有账号,按照你的方法我试了以下百度首页,比如我想试试百度首页选中 新闻/网页/贴吧/知道/音乐 等那几个标签中的一个,代码如下:
url = "https://www.baidu.com/"
driver = webdriver.Firefox()
driver.get(url)
js="return $('#nv a')"

link = driver.execute_script(js)
link[1].click()

错误如下:
link[1].click()
KeyError: 1

另外,为啥python不像java一样,能打印出返回值的类型呢?我试了一下print返回值的__class__值,没有显示在终端,不知道是不是我的方法错误,比如我想打印print link[1]__class__也是报上面错。

ps:前端的东西我稍微懂点,做过前端开发,所以js会一点,java也比较熟悉,就是python不太会,很多库方法不熟悉,不知道怎么使用
作者: ermine    时间: 2015-3-12 23:40
xiaodanfeng520 发表于 2015-3-12 17:14
谢谢你,我按照你的方法试了一下,不过好像不能执行成功,不知道是不是没有登录豆瓣,我没有账号,按照你 ...

又确认了一下,应该是firefox不支持这种,execute_script返回的是js,而不是页面元素
link = driver.execute_script(js)
#直接打印
print link

link[1].click()

如果用chromewebdriver,打印出来的就是一个列表,
[<selenium.webdriver.remote.webelement.WebElement object at 0x00000000029EA518>, <selenium.webdriver.remote.webelement.WebElement object at 0x00000000029EA320>],然后就可以用link[1].click()了

话说,你是为什么一定用js?selenium本身有css选择的
link = driver.find_element_by_css_selector('#u1 a')
print link

link.click()

PS:
我原来的帖子怎么不见了。。。。
作者: xiaodanfeng520    时间: 2015-3-13 09:17
谢谢ermine,我只是想用execute_script(js)这个方法,不是为了达到自动化完成这个功能,我知道有很多方法可以达到我要求的目标,比如link text,d xpath,css等,不过我就是想知道使用python调调用这个execute_script(js)的时候,为什么一直不成功,因为很多地方使用 js定位还是很不错的,jquery本身有很多定位元素的好方法。因为我在java中使用selenium的execute_script(js)的方法是比较好用的,并且我封装了一些别的js的方法,方便自己使用。但是觉得java没有pyhton语言简便,所以考虑用python试试,一来也可以多掌握一门语言,呵呵
作者: zzhengjian    时间: 2015-3-16 22:04
execute_script(js) 这个方法应该是跟语言绑定无关的,我可以理解楼主想用execute_script(js),但是为啥要返回元素对象到python 层面再调webdriver的click()方法的,既然楼主调用执行jquery, 那为啥不用jquery定位之后的click()方法,execute_script("return $('#element').click();");




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2