Selenium3详解(基本操作,定位方法)

如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动。

基本操作:
刷新:refresh,
获取浏览器窗口大小:get_window_size 设置浏览器窗口大小:set_window_siez最大化:maximizewindow
获取浏览器窗口个数、切换到指定窗口:get_window_handle,switch_to.window()
前进:forward
后退:back
关闭:close
退出:quit

 

import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://www.testclass.net/page/2/')
time.sleep(2)
driver.refresh() #刷新

size=driver.get_window_size()
print(size) #打印当前窗口大小

driver.set_window_size(800,900) #设置窗口大小
time.sleep(3)
driver.maximize_window() #最大化

js=("window.open('https://www.json.cn/')")
driver.execute_script(js)
hands=driver.window_handles //获取窗口数
print(hands)
driver.switch_to.window(hands[0]) //切换窗口数

driver.back()
time.sleep(2)
driver.forward()

time.sleep(2)
driver.close() #关闭,当前窗口
time.sleep(5)
driver.quit() #退出,退出所有浏览器

元素定位:
对于对于 Web 自动化测试来说,就是操作页面上的各种元素,在操作元素之间需要先找到元素,换句话说就是定位元素
selenium常见定位元素8中方法:
Id
Name
Classname
Tagname
linkText
partialLinkText
cssSelector
Xpath
重点是xpath定位元素和Tagname定位元素,其他 的自己百度一下

agname,通过标签名称定位
例如:用户名输入框的标签为input

driver.find_element_by_tag_name('input').send_keys('1763798976')

但是用户名和密码输入框的标签都是input,
我们就需要用到find_elements,而不是find_element方法
1.它先返回一个list,表示这个页面有多少个input标签
2.你再根据list的索引去操作这个元素
注意:其它的元素定位方法也是同样的道理,如果定位到多个,用find_elements

input=driver.find_elements_by_tag_name('input') #返回一个list,因为用户名和密码都是input标签
input[1].send_keys('1763') #list[1] 表示在第二个标签输入

Xpath
xpath:path就是路径,类似文件夹Desktop/classnotes/
绝对路径定位:copy xpath (借助谷歌浏览器)
缺点:当页面元素父级元素发生改变,页面元素的位置发生改变时,都需要修改
相对路径定位:以 //开头+标签名 (自己写xpath)
优点:长度和标签开始的位置并不受限制,稳定且万能
看看一些符号的定义
// :表示相对路径 (所以xpath的写法是:以//开头+标签名 )
/.. :表示找上级
/ :表示找下级
@:标签属性定位
() :text的值
* :标签名任意

 

比如上面"用户名"的按钮的id为:username
写相对路径xpath://input[@id="username"]
或者标签名任意://*[@id="username"]
 
 
driver.find_element_by_xpath('//*[@id="username"]')
比如登录按钮的text文本为:登录
写相对路径xpath://button[text()="登录"]
或者标签名任意://*[text()="登录"]
driver.find_element_by_xpath('//*[text()="登录"]')

模糊查询:starts-with
//+标签名[starts-with(@什么属性,'以什么开始')]
//input[starts-with(@type,'pa')]


模糊查询: contains():
表示该元素的属性的值,包含了什么东西

//+标签名[contains(@什么属性,'包含了什么值')]
//input[contains(@type,'ord')]
 
 


'''特殊的元素定位:svg,frame'''


'''SVG 指可伸缩矢量图形 (Scalable Vector Graphics)

需要xpath里面的name()方法:*[name()='svg']'''

'''frame:
frame标签有frameset、frame、iframe三种,
frameset跟其他普通标签没有区别,不会影响到正常的定位,
而frame与iframe需要切换进去才能定位到其中的元素
看例子:'''


driver=webdriver.Chrome()
driver.get("http://www.kuaidi100.com/")
driver.find_element_by_xpath('//*[@id="uDeskTarget"]').click() #点击客服聊天按钮


#切换至frame
driver.switch_to_frame(driver.find_element_by_xpath('udesk_iframe')) #用frame的id来切换
#driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="udesk_iframe"]')) #如果frame没有id和name,用它的xpath来切换


from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.126.com")
driver.switch_to.frame('x-URS-iframe')
driver.find_element_by_name("email").clear()
driver.find_element_by_name("email").send_keys("username")
driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys("password")
driver.find_element_by_id("dologin").click()
driver.switch_to.default_content()
driver.quit()
switch_to.frame() 默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。
除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳回最外层的页面。


 

转载于:https://www.cnblogs.com/cyq0528/p/9878435.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值