selenium官方文档——2.入门

本文介绍了Selenium Python绑定的入门,包括简单用法、示例说明、编写测试以及使用远程WebDriver。通过示例展示了如何创建WebDriver实例,进行网页操作,如定位元素、发送按键,并使用unittest编写测试用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.1。简单用法

如果你已经安装了Selenium Python绑定,你可以像这样从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()

上面的脚本可以保存到文件中(例如: - python_org_search.py),然后就可以像这样运行:

python python_org_search.py

您运行的python应该安装selenium模块。

2.2。示例说明

该selenium.webdriver模块提供了所有的webdriver实现。目前支持的WebDriver实现是Firefox,Chrome,IE和Remote。该键类提供键在键盘像RETURN,F1,ALT等。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

接下来,创建Firefox WebDriver的实例。

driver = webdriver.Firefox()

该driver.get方法将定位在给定的URL的网页。在将控件返回到测试或脚本之前,WebDriver将等待页面完全加载(即“onload”事件已触发)。值得注意的是,如果你的页面在加载时使用了大量的AJAX,那么WebDriver可能不知道它何时完全加载:

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

下一行是断言,确认标题中有“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导入的Keys类 发送特殊键。为安全起见,我们首先清除输入字段中的任何预先填充的文本(例如“搜索”),这样就不会影响我们的搜索结果:

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

提交页面后,如果有结果,您应该得到结果。为确保找到一些结果,请断言:

assert "No results found." not in driver.page_source

最后,浏览器窗口关闭。您也可以调用quit 方法而不是close。该退出将退出整个浏览器,而close`将关闭一个标签,但如果只有一个选项卡是开放的,默认情况下,大多数浏览器将完全退出:

driver.close()

2.3。使用Selenium编写测试

Selenium主要用于编写测试用例。该Selenium包本身不提供测试工具/框架。您可以使用Python的unittest模块编写测试用例。工具/框架的其他选项是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。完成示例

最初,导入所需的所有基本模块。该单元测试模块是内置Python基于Java的JUnit。该模块提供了组织测试用例的框架。该selenium.webdriver模块提供了所有的webdriver实现。目前支持的WebDriver实现是Firefox,Chrome,Ie和Remote。该键类提供键在键盘像RETURN,F1,ALT等。

    import unittest
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys

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

class PythonOrgSearch(unittest.TestCase):

该的setUp是初始化的一部分,此方法将你要在这个测试用例类写的每一个测试函数之前被调用。在这里,您将创建Firefox WebDriver的实例。

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

这是测试用例方法。测试用例方法应始终以字符测试开始。此方法中的第一行创建对setUp方法中创建的驱动程序对象的本地引用。

def test_search_in_python_org(self):
    driver = self.driver

该driver.get方法将定位在给定的URL的网页。在将控件返回到测试或脚本之前,WebDriver将等待页面完全加载(即“onload”事件已触发)。值得注意的是,如果你的页面在加载时使用了大量的AJAX,那么WebDriver可能不知道它何时完全加载:

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

下一行是断言,确认标题中有“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导入的Keys类 发送特殊键:

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

提交页面后,如果有的话,您应该按照搜索结果获得结果。为确保找到一些结果,请断言:

assert "No results found." not in driver.page_source

该拆卸方法将每个测试方法之后被调用。这是一个执行所有清理操作的地方。在当前方法中,浏览器窗口关闭。您也可以调用quit方法而不是 close。该退出将退出整个浏览器,而关闭 将关闭一个标签,但如果它是唯一选项卡中打开,默认情况下大多数浏览器将完全退出:

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

最后一行是运行测试套件的一些样板代码:

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

2.5。使用Selenium远程的webdriver

要使用远程WebDriver,您应该运行Selenium服务器。要运行服务器,请使用以下命令:

java -jar selenium-server-standalone-2.x.x.jar

在运行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)

所需的功能是字典,因此您可以显式指定值,而不是使用默认字典:

driver = webdriver.Remote(
   command_executor='http://127.0.0.1:4444/wd/hub',
   desired_capabilities={'browserName': 'htmlunit',
                         'version': '2',
                        'javascriptEnabled': True})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值