您的位置:首页 > 其它

selenium webdriver定位方式

2017-03-07 14:21 204 查看
1、css定位:
http://www.w3.org/TR/css3-selectors
http://www.w3school.com.cn/css/css_positioning.asp

2、xpath定位:
http://www.w3.org/TR/xpath
http://www.w3schools.com/xpath/default.asp
http://magustest.com/blog/category/webdriver/

3、鼠标事件:

from selenium.webdriver.common.action_chains import ActionChains
#定位到要右击的元素

qqq

=driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table

/tbody/tr/td[2]")

#对定位到的元素执行鼠标右键操作

ActionChains(driver).context_click(qqq).perform()

鼠标拖放操作的写法:

#定位元素的原位置

element = driver.find_element_by_name("source")

#定位元素要移动到的目标位置

target = driver.find_element_by_name("target")
#执行元素的移动操作

ActionChains(driver).drag_and_drop(element, target).perform()  

4、pop()

pop() 定义和用法
pop() 方法用于删除并返回数组的最后一个元素。
语法 :arrayObject.pop()
返回值 :arrayObject 的最后一个元素。
说明 :pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。

#把页面上最后1个checkbox的勾给去掉
dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()
time.sleep(2)
dr.quit()

5、多层框架窗口定位

多层框架或窗口的定位:
     switch_to_frame()
     switch_to_window()

 #先找到到ifrome1(id = f1)
browser.switch_to_frame("f1")
#再找到其下面的ifrome2(id =f2)
browser.switch_to_frame("f2")
#下面就可以正常的操作元素了
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()  

6、下拉框定位:
# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
import os

dr = webdriver.Firefox()
file_path = 'file:///'+ os.path.abspath('level_locate.html')
dr.get(file_path)
#点击Link1链接(弹出下拉列表)
dr.find_element_by_link_text('Link1').click()
#找到id为dropdown1的父元素
WebDriverWait(dr,                 10).until(lambda                  the_driver:
the_driver.find_element_by_id('dropdown1').is_displayed())
#在父亲元件下找到lin 为Action的子元素
menu = dr.find_element_by_id('dropdown1').find_element_by_link_text('Action')
#鼠标定位到子元素上
webdriver.ActionChains(dr).move_to_element(menu).perform()
time.sleep(2)

注释:
WebDriverWait(dr,10)

10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。dr就不解释了,前
面操作webdriver.firefox()的句柄

is_displayed()
该元素是否用户可以见

classActionChains(driver)
driver 执行用户操作实例webdriver
生成用户的行为。所有的行动都存储在actionchains对象。通过perform()存储的行为。

move_to_element(menu)
移动鼠标到一个元素中,menu上面已经定义了他所指向的哪一个元素
to_element:元件移动到
perform()
执行所有存储的行为  

6、下拉框处理:

Select称为选择类,主要使用场景在下拉菜单或者列表中,
from selenium.webdriver.support.select import  Select
from selenium.webdriver.common.action_chains import  ActionChains

例如:
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('http://www.baidu.com/')
t.sleep(3)
element=driver.find_element_by_link_text(u'设置')
ActionChains(driver).move_to_element(element).perform()
t.sleep(3)
driver.find_element_by_css_selector(".setpref").click()
select=Select(driver.find_element_by_id('nr'))
select.select_by_index(2)
driver.quit()

7、alert处理:
from selenium.webdriver.common.alert import Alert
#获取alert弹出警告框的text
print driver.switch_to_alert().text
#接受警告框
driver.switch_to_alert().accept()

8、WebDriverWait类的介绍
111:element_to_be_clickable(locator)是等待页面元素可见的时候操作,会设置一定范围的时间,如果在时间范围内,元素可见,就执行操作,元素不可见,就会引发TimeoutException的异常。
webdriver提供WebDriverWait类和expected_conditions模块来执行一个显式的等待
from selenium.webdriver.support.ui import  WebDriverWait
from selenium.webdriver.support import expected_conditions
例子:
driver.get('http://www.baidu.com')
so=WebDriverWait(driver,10).until(expected_conditions.element_to_be_clickable((By.ID,'kwkw')))
so.send_keys('appium')
222:
text_to_be_present_in_element(locator,text)是指定页面元素的文本位置,一般用于验证一个文本信息或者错误的信息
例子:
WebDriverWait(driver,10).until(expected_conditions.text_to_be_present_in_element((By.CSS_SELECTOR,"#TANGRAM__PSP_8__error"),u'请您填写手机/邮箱/用户名'))
333:
visibility_of_element_located(locator)是元素可见后再执行其他的操作
例子:
element=WebDriverWait(driver,10).until(expected_conditions.visibility_of_element_located((By.XPATH,".//*[@id='lh']/a[3]")))
print element.text
driver.quit()
444:
implicitly_wait()方法是隐式等待,用来设置超时,一般把implicitly_wait()方法调用在加载测试地址后,等待所测试的  应用程序加载,这样就会有一个缓充的过程
例子:
driver.implicitly_wait(30)
555:
WebDriverWait()是显式等待,也就是说会明确等待的时间
例子:
locator=WebDriverWait(driver,10).until(expected_conditions.visibility_of_element_located((By.ID,'kw')))
locator.send_keys('appium')
driver.quit()
9、ActionChains类的介绍
111:move_to_element()方法可以理解为悬停
例子:
locator=driver.find_element_by_link_text(u'设置')
ActionChains(driver).move_to_element(locator).perform()

222:context_click()是右击,一般右击后,会弹出删除分享等
例子:
content=driver.find_element_by_xpath(".//*[@id='yao-main']/div/div[4]/div[1]/div[2]/div/div[1]/div[1]/span/span")
ActionChains(driver).context_click(content).perform()

333:double_click()是双击元素
double_click()是双击元素,一般使用在有数据交互的地方比较合理,如点击一个按钮,点击以下按钮,会往数据库insert一条数据,如果开发未屏蔽双击,双击下,那么意味着insert二条数据
例子:
double=driver.find_element_by_id('su')
ActionChains(driver).double_click(double).perform()

444:click_and_hold()指的是按住鼠标左键在源元素上,点击并且不释放
例子:
hold=driver.find_element_by_id('su')
ActionChains(driver).click_and_hold(hold).perform()
driver.quit()

release()值鼠标释放,在调用click_and_hold()方法的时候,鼠标并没有释放,可以执行release()方法,这样鼠标可以得到释放
例子:
ActionChains(driver).click_and_hold(hold).release()

555:send_keys()是模拟键盘事件,如按下F5刷新键等,切记需要导入Keys类
from selenium.webdriver.common.keys import Keys
so.send_keys(Keys.SPACE)

9、js事件:通过execute_script()调用js
例子:
 js="var q=document.documentElement.scrollTop=10000"
     self.driver.execute_script(js)
富文本的处理:
def richText(content):
      js='document.getElementById("ueditor_0").
     contentWindow.document.body.innerHTML="%s"' %(content)
     driver.execute_script(js)

时间控件的处理:
<input id="dp1448375755034" class="text-box hasDatepicker" type="text" style="cursor:pointer;" readonly="readonly" title="开始时间≥当前时间" placeholder="开始时间≥当前时间" value="" name="act_start_time">
下来要实现的就是在开始时间和结束时间选择时间,实现的方式思路为:
1、取消日期控件的readonly属性,
2、给value赋值,
3、写js代码来实现如上的1,2点,再webdriver对js进行处理
startJs=js1="$(\"input[placeholder='开始时间≥当前时间']\").removeAttr('readonly');$(\"input[placeholder='开始时间≥当前时间']\").attr('value','2014-08-10 12:00:00')"
stopTime="$(\"input[placeholder='结束时间>开始时间']\").removeAttr('readonly');$(\"input[placeholder='结束时间>开始时间']\").attr('value','2014-08-1013:16:00')"

对视频的控制:
在视频网站中,怎么可以实现对视频进行自动化的控制播放和暂停了?我们可以利用html5中的video元素来实现,<video>标签是定义视频,比如电影片或者其他视频流。对于自动化的控制视频的播放,暂停,我们通过获取<video>元素,获取到它的ID,然后获取视频的播放源进行确认,最后通过js控制视频的播放,暂停。我们已http://www.videojs.com/为实例说明,打开链接地址后,就会看到一个视频,我们看视频的源码,源码见如下:
<video id="preview-player_html5_api" class="vjs-tech" data-setup="{}" poster="http://video-js.zencoder.com/oceans-clip.png" preload="auto">
<source type="video/mp4" src="http://video-js.zencoder.com/oceans-clip.mp4"></source>
<source type="video/webm" src="http://video-js.zencoder.com/oceans-clip.webm"></source>
<source type="video/ogg" src="http://video-js.zencoder.com/oceans-clip.ogv"></source>
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a web browser that
<a target="_blank" href="http://videojs.com/html5-video-support/">supports HTML5 video</a>
</p>
</video>

代码例子:
video=driver.find_element_by_id('preview-player_html5_api')
js="return arguments[0].currentSrc"
driver.execute_script(js,video)
t.sleep(10)
#视频的播放
driver.execute_script("return arguments[0].play()",video)
t.sleep(3)
#视频的暂停
driver.execute_script("arguments[0].pause()",video)
t.sleep(3)

10、顺序执行用例
if __name__=='__main__':
    suite=unittest.TestSuite()
    suite.addTest(baiduPage('test_001'))
    suite.addTest(baiduPage('test_002'))
    suite.addTest(baiduPage('test_003'))
    unittest.TextTestRunner(verbosity=2).run(suite)

#优选
if __name__=='__main__':
suite=unittest.TestSuite(unittest.makeSuite(baiduPage))
unittest.TextTestRunner(verbosity=2).run(suite)

利用makeSuite方法,就不需要担心有多少个case了,只需要把测试的类传入即可,测试代码部分,还需要重构吗?当然,生命不息,重构不息。把测试套件代码进行重构(suite=unittest.TestSuite(unittest.makeSuite(baiduPage))),编写成一个静态方法suite,见重构后的方法和调用:
@staticmethod
def suite():
    suite=unittest.TestSuite(unittest.makeSuite(baiduPage))
return suite
if __name__=='__main__':
unittest.TextTestRunner(verbosity=2).run(baiduPage.suite())
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: