代码改变世界

Selenium API

2017-03-28 11:28  linkxu  阅读(290)  评论(0编辑  收藏  举报
导入模块:
from selenium import webdriver

from selenium.common.exceptions import NoSuchElementException

 

选择浏览器:driver = webdriver.Firefox()

打开url:driver.get("http://www.baidu.com")

等待:driver.implicitly_wait(30)

        driver.set_page_load_timeout(30)

driver.set_script_timeout(30)

关闭浏览器:driver.quit()/driver.close()

添加休眠:time.sleep()

智能等待:implicitly_wait()

打印title:driver.title

打印URL:print "now access %s"%(url)

        get(url)

浏览器最大化:maximize_window()

设置浏览器长宽:set_window_size(x,y)

前进/后退:driver.forward()/driver.back()

刷新:driver.refresh()

返回当前页面标题:driver.title

返回当前页面url:driver.current_url

返回当前浏览器的所有窗口:driver.window_handles

返回当前浏览器的窗口句柄:driver.current_window_handle

选择窗口:driver.switch_to_window(“window_name”)

对话框操作:driver.switch_to_alert() #选择窗口对象

driver.switch_to_frame()  #多层框架定位。  

    accept()  #点击确认

    dismiss() #点击取消

    click()   #点击对象   

    context_click()  #右击  

    double_click()   #双击

    drag_and_drop()   #拖动  

    clear()   #清除对象内容

    submit()  #提交表单

    text       #获取文本值

    send_keys(“key”)   #输入值

    get_attribute() #获得属性值

定位元素(单个):driver.find_element(by=”id”,value=None)

Id定位: driver.find_element_by_id(“id_name”)

Name定位:driver.find_element_by_name(“name”)

Css定位: driver.find_element_by_css_selector(“#foo”)

Xpath定位:driver.find_element_by_xpath(“//select[@id=’nr’]/option[2]”)

Link定位:driver.find_element_by_link_text(u”链接”)

Tag定位: driver.find_element_by_tag_name(“foo”)

截取当前页面: driver.get_screenshot_as_file('/Screenshots/foo.png')

HTMLTestRunner测试结果保存:

# -*- coding: UTF-8 -*- 

from selenium import webdriver

# from selenium webdriver.common.by import By

# from selenium webdriver.common.keys import Keys

# from selenium webdriver.common.support.ui import Select

from selenium.common.exceptions import NoSuchElementException

import HTMLTestRunner

import unittest,time,re

from fileinput import filename

from lxml.html._diffcommand import description

class Baidu(unittest.TestCase):

    def setUp(self):

        self.driver=webdriver.Firefox()

        self.driver.implicitly_wait(30)

        self.base_url="http://www.baidu.com/"

        self.verificationErrors=[]

        self.accept_next_alert=True

    #test_baidu_search

    def test_baidu_search(self):

        driver=self.driver

        driver.get(self.base_url+"/")

        driver.find_element_by_id("kw").send_keys("selenium webdriver")

        driver.find_element_by_id("su").click()

        time.sleep(2)

        driver.close()

    #test_baidu_set

    def test_baidu_set(self):

        driver=self.driver

        #get(self.base_url

        driver.get(self.base_url+"/gaoji/preferences.html")

        #value='100

        m=driver.find_element_by_name("NR")

        m.find_element_by_xpath("//option[@value='100']").click()

        time.sleep(2)

        #accept

        driver.find_element_by_xpath("//input[@value='保存设置']").click()

        time.sleep(2)

        driver.switch_to_alert().accept()

    def tearDown(self):

        self.driver.quit()

        self.assertEqual([], self.verificationErrors)

if __name__=="__main__":

    testunit=unittest.TestSuite()

    testunit.addTest(Baidu("test_baidu_search"))

    testunit.addTest(Baidu("test_baidu_set"))  

    filename='D:\result.html'

    fp=file(r'D:\result.html','wb')

    runner=HTMLTestRunner.HTMLTestRunner(

    stream=fp,

    title='Test_baidu',

    description='testbaiu')

    runner.run(testunit)    

IOError: [Errno 22] invalid mode ('r') or filename:
这种错误的出现是在使用built-in函数file()或者open()的时候。或者是因为文件的打开模式不对,或者是文件名有问题。前者的话只需要注意文件是否可读或者可写就可以了。后者则是与文件路径相关的问题,需要在文件名前加r或者R转义,如:file(r"e:\Test.txt",'r').或者将反斜杠\变成两个,如file("e:\\Test.txt",'r').