selenium-python(2. 开始)

2. 开始

2.1. 简单的使用

假如你已经在Python安装了Selenium,你可以复制如下python代码到你的编辑器之中:

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.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

将以上代码保存在一个py文件中(如python_org_search.py),跟着执行以下的python命令(使用Linux命令或者window用户使用cmd执行以下命令):

python python_org_search.py
你运行这条python代码之前,请确保安装了selenium模块

2.2. 例子说明


selenium.webdriver模块提供所有WebDriver 的实现。目前支持WebDriver 实现的浏览器有Firefox, Chrome, IE and Remote。selenium模块中Keys 类(class)会提供键盘上按纽的支持,如RETURN, F1, ALT 等.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

接下来,创建Firefox WebDriver的实例。将对象赋予变量driver

driver = webdriver.Firefox()
变量driver的get方法内参数为要打开url。在返回给你的测试或者脚本结果之前,WebDriver一直等待页面完全加载完(即,"onload"事件已经触发)。这里要注意的是,假如你的page有很多ajax需要加载,WebDriver可能会无法确认页面什么时候加载完成.:
driver.get("http://www.python.org")

下一行是用assert的方式确认标题是否包含“Python”一词。 (译注:assert 语句将会在之后的语句返回false后抛出异常,详细内容可以自行百度,摘自http://selenium-python-zh.readthedocs.io/en/latest/getting-started.html)

assert "Python" in driver.title

WebDriver 提供大量方法去查询html的元素对象(如find_element_by_*方法)。例如通过input里面的name属性使用find_element_by_name方法去查询。获取其他查询元素的详细说明,我们会在后面的章节中介绍:

elem = driver.find_element_by_name("q")

下面,我们尝试模仿键盘输入数据.一些特殊字符就需要导入selenium.webdriver.common.keys 类.为了安全起见,我们预先使用clear()方法清除控件里面的内容(如:"搜索")这样就不会影响我们查询的结果:

elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
提交页面之后,或者你可以得到一些反馈的结果。但以确保能得到一些结果反馈,做了这样的声明:
assert "No results found." not in driver.page_source
最后,关闭浏览器。你可以声明quit方法取代closequit方法关闭整个浏览器,而close方法只会关闭一个tab,假如浏览器只有一个tab的时候,使用close方法,大部分浏览器会默认关闭整个浏览器。:
driver.close()

2.3. 使用Selenium写一个测试

Selenium大部分情况下用来写测试案例。Selenium包自身不提供测试工具/框架。你可以使用Python的单元测试模块来写测试案例。py.test 和nose是其它选项的工具/框架。
在本章中,我们使用unittest 编写测试代码。下面被修改的例子就是使用了unittest模块。这段测试代码通过python.org搜索出来:
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("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source


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

if __name__ == "__main__":
    unittest.main()
你可以在shell脚本运行以上的代码:
python test_python_org_search.py
.
----------------------------------------------------------------------
Ran 1 test in 15.566s

OK
上面出结果表示测试完成。

2.4. 逐步解释案例

首先,导入所有必须的基础模块。The unittest 基于了Java的JUnit的内置Python的模块 。这个模块提供了框架去组织测试案例。selenium.webdriver模块提供了所有WebDriver接口。目前支持WebDriver 有Firefox, Chrome, Ie和Remote。Keys类提供点击键盘操作,如 RETURN, F1, ALT 等。
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

测试类继承了unittest.TestCase,unittest模块表明,这个类是测试案例:

lass PythonOrgSearch(unittest.TestCase):
setUp()是初始化的一部分,这个方法会在你准备编写的测试案例类之前声明一次。这里你正在创建 Firefox WebDriver实例。
def setUp(self):
    self.driver = webdriver.Firefox()

这是测试方法,而测试方法的命名一般以‘test’作为前缀。在code第一行中,将已经setUp()方法里面被声明的self.driver对象,赋予给driver变量。

def test_search_in_python_org(self):
    driver = self.driver
driver的get方法的参数,是将要访问的url地址。 WebDriver对等待页面完全被加载之后(换言之,“onload”事件已经被触发)返回控制权给你的测试案例或者脚本。这里要注意的是,假如你的page有很多ajax需要加载,WebDriver可能会无法确认页面什么时候加载完成.:

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

下面一行使用assert断言的方法判断在页面标题中是否包含 “Python”

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

WebDriver 提供大量方法去查询html的元素对象(如find_element_by_*方法)。例如通过input里面的name属性使用find_element_by_name方法去查询。获取其他查询元素的详细说明,我们会在后面的章节中介绍:

elem = driver.find_element_by_name("q")

下面,我们尝试模仿键盘输入数据。一些特殊字符就需要导入selenium.webdriver.common.keys 类。:

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

提交页面之后,或者你可以得到一些反馈的结果。但以确保能得到一些结果反馈,做了这样的声明:
assert "No results found." not in driver.page_source
在任何测试方法的最后,声明一个 tearDown()方法。这里作用是作清除工作。在这方法里将浏览器关闭。你也可以声明quit()方法去取代close()方法。quit方法关闭整个浏览器,而close方法只会关闭一个tab,假如浏览器只有一个tab的时候,使用close方法,大部分浏览器会默认关闭整个浏览器。:
ef tearDown(self):
    self.driver.close()
下面几行是入口函数:
if __name__ == "__main__":
    unittest.main()

2.5. 使用远程WebDriver

To use the remote WebDriver, you should have Selenium server running. To run the server, use this command:

使用远程 WebDriver。你应用Selenium 服务器环境里执行。执行以下命令,启动服务:
java -jar selenium-server-standalone-2.x.x.jar

While running the Selenium server, you could see a message looking like this:

Selenium 服务器成功启动时候,你可以看到以下的提示:
15:43:07.541 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub

以上表明。使用这个URL可以远程连接WebDriver。接下来有几个例子说明:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

driver = webdriver.Remote(
   command_executor='http://127.0.0.1:4444/wd/hub',
   desired_capabilities=DesiredCapabilities.CHROME)

driver = webdriver.Remote(
   command_executor='http://127.0.0.1:4444/wd/hub',
   desired_capabilities=DesiredCapabilities.OPERA)

driver = webdriver.Remote(
   command_executor='http://127.0.0.1:4444/wd/hub',
   desired_capabilities=DesiredCapabilities.HTMLUNITWITHJS)

所需的功能是一个字典,因此不使用缺省字典,您可以显式地指定这些值:

river = webdriver.Remote(
   command_executor='http://127.0.0.1:4444/wd/hub',
   desired_capabilities={'browserName': 'htmlunit',
                         'version': '2',
                        'javascriptEnabled': True})





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值