<译>Selenium Python Bindings 2 - Getting Started

时间:2023-03-09 02:04:51
<译>Selenium Python Bindings 2 - Getting Started
  1. Simple Usage
    如果你已经安装了Selenium Python,你可以通过Python这样使用:
    #coding=gbk
    '''
    Created on 2014年5月6日
    
    @author: user
    '''
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Firefox()
    driver.get("http://www.python.org")
    assert "Python" in driver.title
    elem = driver.find_element_by_name("q")
    elem.send_keys("selenium")
    elem.send_keys(Keys.RETURN)
    driver.close()

    (如果设置了Python的环境变量,保存后可以直接双击运行)

  2. Walk through of the example(剖析上例)
    Selenium WebDriver模块提供了所有的webdriver实现。目前webdriver支持:火狐,Chrome,IE和远程。键值类提供键值:RETURN,F1,ALT等。
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys

    然后,火狐中的WebDriver实例被创建:

    driver = webdriver.Firefox()

    driver.get方法将导航到给定的URL页面。WebDriver将等到页面完全加载在返回控制权到你的测试脚本之前。值得一提的是,如果页面大量的采用AJAX,那么WebDriver也许不知道什么时候完全加载。

    driver.get("http://www.python.org")

    下一行代码断言确认页面title是否含有“Python”这个单词内容:

    assert "Python" in driver.title

    WebDriver提供了很多通过find_element_by_*来寻找元素的方法,例如,输入文本元素可以放置使用find_element_by_name方法,它的name属性。

    elem = driver.find_element_by_name("q")

    接下来,我们模拟按键输入按键值,这类似于使用键盘输入键。特殊键可以使用按键类从selenium.webdriver.common.keys导入。

    elem.send_keys("selenium")
    elem.send_keys(Keys.RETURN)

    最后浏览器将被关闭:

    driver.close()
  3. Using Selenium to write tests

    Selenium 主要用于编写测试用例。Selenium包本身不提供测试工具/框架。您可以使用Python的unittest模块编写测试用例。其他选项作为一种工具/框架有py.test和nose。

    在本章中,我们使用单元测试作为选择的框架。这里改变的用例,它使用unittest模块。这里是对python.org搜索功能的一个用例:

    #coding=gbk
    '''
    Created on 2014年5月6日
    
    @author: user
    '''
    import unittest
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    class PythonOrgSearch(unittest.TestCase):
    
        def setUp(self):
            self.driver = webdriver.Firefox()
    
        def test_search_in_python_org(self):
            driver = self.driver
            driver.get("http://www.python.org")
            self.assertIn("Python", driver.title)
            elem = driver.find_element_by_name("q")
            elem.send_keys("selenium")
            elem.send_keys(Keys.RETURN)
    
        def tearDown(self):
            self.driver.close()
    
    if __name__ == "__main__":
        unittest.main()

    (如果是使用pydev来开发,那么要设置PyDev的code analysis 的undefined为 warning)

    运行结果如下:

    Finding files... done.
    Importing test modules ... done.
    
    ----------------------------------------------------------------------
    Ran 1 test in 31.453s
    
    OK
  4. Walk through of the example
    最初,所需要的基本模块需要被导入。 unittest模块是内置在Python中基于Java的JUnit的。该模块提供了用于组织测试用例的框架。该selenium.webdriver模块提供了所有的webdriver实现。目前支持的实现的webdriver:火狐,Chrome,IE和远程。
    import unittest
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys

    这个测试用例类是从unittest.TestCase的继承。从TestCase类继承的方式是告诉unittest模块:这是一个测试案例:

    class PythonOrgSearch(unittest.TestCase):

    setUp是初始化的一部分,这个方法将在写测试用例之前调用每一个测试方法。下面是创建一个火狐浏览器WebDriver的用例:

    def setUp(self):
        self.driver = webdriver.Firefox()

    这是测试用例的方法。这种方法中的第一行创建一个本地参考setUp方法创建的驱动程序对象。

    def test_search_in_python_org(self):
        driver = self.driver

    driver.get方法将导航到给定的URL页面。WebDriver将等到页面完全加载在返回控制权到你的测试脚本之前。值得一提的是,如果页面大量的采用AJAX,那么WebDriver也许不知道什么时候完全加载。

    driver.get("http://www.python.org")

    下一行代码断言确认页面title是否含有“Python”这个单词内容:

    self.assertIn("Python", driver.title)

    WebDriver提供了很多通过find_element_by_*来寻找元素的方法,例如,输入文本元素可以放置使用find_element_by_name方法,它的name属性。

    elem = driver.find_element_by_name("q")

    接下来,我们模拟按键输入按键值,这类似于使用键盘输入键。特殊键可以使用按键类从selenium.webdriver.common.keys导入。

    elem.send_keys("selenium")
    elem.send_keys(Keys.RETURN)

    提交页面后,你应该得到的结果按搜索,如果有的话。

    tearDown方法将每个测试方法之后被调用。这步完成所有的清理行动。在目前的方法中,在浏览器窗口是关闭的。默认情况下,大多数浏览器将完全退出。

    def tearDown(self):
        self.driver.close()

    最后是模板代码内容:

    if __name__ == "__main__":
        unittest.main()