51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 11630|回复: 6
打印 上一主题 下一主题

问一下webdriver的execute_script功能

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2015-3-11 18:38:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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的帮忙指导一下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2015-3-12 09:21:36 | 只看该作者
再把代码贴一下,不知道为啥这个显示黑块?

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();
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2015-3-12 13:24:07 | 只看该作者
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()

评分

参与人数 1测试积点 +10 收起 理由
lsekfe + 10 恭喜你获得测试积点10

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2015-3-12 17:14:02 | 只看该作者
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不太会,很多库方法不熟悉,不知道怎么使用
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2015-3-12 23:40:11 | 只看该作者
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:
我原来的帖子怎么不见了。。。。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2015-3-13 09:17:59 | 只看该作者
谢谢ermine,我只是想用execute_script(js)这个方法,不是为了达到自动化完成这个功能,我知道有很多方法可以达到我要求的目标,比如link text,d xpath,css等,不过我就是想知道使用python调调用这个execute_script(js)的时候,为什么一直不成功,因为很多地方使用 js定位还是很不错的,jquery本身有很多定位元素的好方法。因为我在java中使用selenium的execute_script(js)的方法是比较好用的,并且我封装了一些别的js的方法,方便自己使用。但是觉得java没有pyhton语言简便,所以考虑用python试试,一来也可以多掌握一门语言,呵呵
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2015-3-16 21:26
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    7#
    发表于 2015-3-16 22:04:22 | 只看该作者
    execute_script(js) 这个方法应该是跟语言绑定无关的,我可以理解楼主想用execute_script(js),但是为啥要返回元素对象到python 层面再调webdriver的click()方法的,既然楼主调用执行jquery, 那为啥不用jquery定位之后的click()方法,execute_script("return $('#element').click();");
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-7 05:41 , Processed in 0.069214 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表