在selenium/webdriver/remote/webdriver中可以看到webdriver提供的元素定位方法。
目前提供的定位方式共8种:
find_element_by_id()
find_element_by_xpath()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_name()
find_element_by_tag_name()
find_element_by_class_name()
find_element_by_css_selector():
另外,webdriver中还提供了8种元素复数的定位方法,返回的结果是一个元素列表:
find_elements_by_id()
find_elements_by_xpath()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_name()
find_elements_by_tag_name()
find_elements_by_class_name()
find_elements_by_css_selector()
这8种定位方法,主要是以前端页面标签和属性的形式进行元素定位。
比如下标签:
<input name="account1" id="account" class="account input" pattern="required" placeholder="邮箱/用户名/已验证手机" inform="0" />
通过id方式定位:
element_account=driver.find_element_by_id("account")
element_account.send_keys("abc@qq.com")
通过name方式定位:
element_account1=driver.find_element_by_name("account1")
element_account1.send_keys("abc@qq.com")
通过class方式定位:
element_account=driver.find_element_by_class_name("account input")
element_account.send_keys("abc@qq.com")
link_text、partial_link_text用于定位超链接
find_element_by_link_text() 需要传递整个超链接作为参数(参数值如果为中文,需要转为unicode)
find_element_by_partial_lint_text() 可以只传递部分超链接值作为参数(参数值如果为中文,需要转为unicode)
<a href="/tshop/index.php?con=simple&act=reg">立即注册</a>
element_link=driver.find_element_by_link_text(u"立即注册")
element_link.click()
element_link=driver.find_element_by_partial_link_text(u"注册")
element_link.click()
通过xpath方式定位:
element_xpath=driver.find_element_by_xpath('//[@id="main"]/div/div/form/ul/li[4]/button')
element_xpath.click()
通过css方式定位:
element_css=driver.find_element_by_seletor_css("li:nth-child(4) > button")
element_css.click()
至于定位单个元素与多个元素的方式差不多,主要区别是element 返回值单个元素,elements返回的是一个元素列表。
element_menu=driver.find_elements_by_xpath('//*[@id="header"]/div[3]/ul/li[@class="link"]')
element_menu[1].click() #点击菜单栏的【限时抢购】(通过列表下标的形式调用)
实例代码:
#-*-encoding:utf-8-*- from selenium import webdriver from time import sleep driver=webdriver.Chrome() driver.get("http://testshop:8081/tshop/index.php?con=simple&act=login") #登录 def login_shop(userName,pwd): element_account=driver.find_element_by_id("account") #通过id定位 element_account.send_keys(userName) element_password=driver.find_element_by_name("password") #通过name定位 element_password.send_keys(pwd) element_loginBtn=driver.find_element_by_xpath('//button[@class="btn btn-main "]') #通过xpath定位 element_loginBtn.click() def click_menu(value): #0:首页、1:限时抢购、2:团购、3:服装、4:手机商城 element_menu=driver.find_elements_by_xpath('//*[@id="header"]/div[3]/ul/li[@class="link"]') #通过elements 获取整个菜单元素,并存放在list中 element_menu[value].click() #通过list下标进行点击操作 login_shop(userName="123@qq.com",pwd="123456") sleep(2) click_menu(2)