#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@desc: 讲讲web项目中常用的方法属性
webdriver 提供了八种元素定位方法:
id、name、class name、tag name、link text、partial link text、xpath、css selector
在 Python 语言中对应的定位方法如下:
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
"""
from selenium import webdriver
import os
import sys path = os.getcwd()
path = 'file://' + path.split('test_case')[0] + 'demo_html' + os.path.sep + 'test.html' test_html = path.decode('gbk').encode('utf-8')
baidu_url = 'http://www.baidu.com' dr = webdriver.Firefox()
dr.implicitly_wait(30)
dr.get(baidu_url) # 百度搜索框的html
# <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off"> # 1.根据id属性定位, id="kw"
dr.find_element_by_id('kw').clear()
dr.find_element_by_id('kw').send_keys('python') # 2.根据name属性定位, name="wd"
dr.find_element_by_name('wd').clear()
dr.find_element_by_name('wd').send_keys('python') # 3.根据class属性定位, class="s_ipt"
dr.find_element_by_class_name('s_ipt').clear()
dr.find_element_by_class_name('s_ipt').send_keys('python') # 4.find_element_by_tag_name(), 搜索框的标签是<input></input>
# TIPS:通常很少使用tagname定位,因为页面上包含的相同标签数太多时,
# 比如_testfile页面,包含了3个input元素,使用find_element_by_tag_name('input')时,
# driver是无法区分出你到底要对哪个input操作,这里我们使用find_elements_by_tag_name('input')
# 注意这里find_elements_xxx的用法
dr.get(test_html)
eles = dr.find_elements_by_tag_name('input')
for e in eles:
if e.get_attribute('id') == 'username':
e.send_keys(u'这是用户名输入框') # 5.find_element_by_link_text()
# <a onmousedown="return ns_c({'fm':'behs','tab':'tj_duty'})" href="http://www.baidu.com/duty/">使用百度前必读</a>
# 加 u 的作用是把中文字符串转换成unicode 编码
dr.get(baidu_url)
dr.find_element_by_link_text(u'使用百度前必读').click() # 6.find_element_by_partial_link_text(), partial link text是对link text的补充。
# 只要取文本链接中的一部分即可,下面2行代码定位到的是同一个元素
dr.back() # 返回上一页
dr.find_element_by_partial_link_text(u'使用百度').click()
dr.back()
dr.find_element_by_partial_link_text(u'百度前必读').click() # 7.find_element_by_xpath()
dr.back()
# 7.1 使用绝对路径xpath定位
dr.find_element_by_xpath("/html/body/div[3]/div[1]/div/div[1]/div/form/span[1]/input").send_keys('')
# 7.2 使用相对路径的xpath定位
# 关于xpath的技巧,建议亲们在后期深入学习时重点研究下。通过常规方法不能定位元素时,使用xpath/css肯定是可行的。
# <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
dr.find_element_by_xpath("//input[@id='kw']").send_keys('')
dr.find_element_by_xpath("//input[@name='wd']").send_keys('')
dr.find_element_by_xpath("//input[@class='s_ipt']").send_keys('')
dr.find_element_by_xpath("//*[@class='s_ipt']").send_keys('') # 8.find_element_by_css_selector()
dr.find_element_by_css_selector(".s_ipt").send_keys('') # .号后面跟的是class属性, class="s_ipt"
dr.find_element_by_css_selector("#kw").send_keys('') # #号后面跟的是id属性, id="kw" # 这里停留30秒,百度输入框里输入的是0123456
import time
time.sleep(30) #
print u"搜索按钮的文字是>>>", dr.find_element_by_id('su').text dr.get(baidu_url)
news_link = dr.find_element_by_link_text(u"新闻")
print u"新闻链接是>>>", news_link.get_attribute("href")
print u"新闻链接的name属性是>>>", news_link.get_attribute("name") # 9.退出,有2种方法
dr.quit() # 关闭【所有窗口】,并退出相关的驱动程序,
# dr.close() # 关闭【当前窗口】,注意两者的区别 # find_element_by_xxxx 和find_elements_by_xxx的区别:
# find_element_by_xxxx:定位一个元素
# find_elements_by_xxx:定位一组元素,得到的是一个list,要从list取值后再对每个元素做具体操作

selenium+python笔记1的更多相关文章

  1. selenium+python笔记11

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: search in mail box "&qu ...

  2. selenium+python笔记10

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ 我们多添加一些测试场景,比如:删除邮件,查找邮件,发送邮件等等 &qu ...

  3. selenium+python笔记9

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: delete mail 我们多添加一些测试场景,比如:删 ...

  4. selenium+python笔记8

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 定制浏览器 """ imp ...

  5. selenium+python笔记7

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 测试126邮箱的登陆功能 1.使用公共方法public. ...

  6. selenium+python笔记6

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 将登陆动作封装成function "" ...

  7. selenium+python笔记5

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 登陆126邮箱 """ f ...

  8. selenium+python笔记4

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 使用unittest组织用例 ""& ...

  9. selenium+python笔记3

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc:学习unittest的用法 注意setUp/setUpCl ...

  10. selenium+python笔记2

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 操作浏览器 """ fro ...

随机推荐

  1. SqlSever基础 rtrim与ltrim嵌套使用 除去字符串左右两边的空格

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  2. qt 1 qt开发中的窗口设计

    一个简单的qt界面 相应代码如下: setWindowTitle(tr("Sotware"));//设置窗体标题 ui->tabWidget->removeTab(); ...

  3. 新买了ipad,在ipad上面看见的一个效果,pc上应该也见过,但是还是ipad上面有印象,如果是弹性运动就最好了

    新买了ipad,在ipad上面看见的一个效果,pc上应该也见过,但是还是ipad上面有印象,如果是弹性运动就最好了 <!DOCTYPE html> <html> <hea ...

  4. Map Columns From Different Tables and Create Insert and Update Statements in Oracle Forms

    This is one of my most needed tool to create Insert and Update statements using select or alias from ...

  5. oracle, create table, insufficient privileges

    SQL> exec pro_gz_day_report;          ORA-01031: insufficient privileges          ORA-06512: at & ...

  6. kaili 2.0 开启ssh远程

    第一步:更改sshd_config文件

  7. [SAP ABAP开发技术总结]客户端文本文件、Excel文件上传下载

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. MySQL SELECT语句

    说明:MySQL的offset第一行是0 位置指的是在SELECT语句中第几个出现的字段,如:1,则代表用第一个出现的字段来分组. SELECT语句: SELECT  select_expr1 [,s ...

  9. Codeforces Round #261 (Div. 2) B

    链接:http://codeforces.com/contest/459/problem/B B. Pashmak and Flowers time limit per test 1 second m ...

  10. 网上搜集的jq常用代码

    1. 设置IE特有的功能:  if ($.browser.msie) { //do something... } 2. 使用jQuery来代替一个元素: $('#thatdiv').replaceWi ...