快速、简单、可靠的浏览器自动化和测试。

seleniumbase的Python项目详细描述


<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
"relrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrelrel"56" src======="http://www/b494949984848484////1655555555555555555555555555555555555555555555555555555555555555555555555555555555555555999999999999999999999932888888888888888888888888888816765732F53425F4C6F676F34342E706E67" />

<

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<===========73652f73656c656e69756d626173652f53656c656e69756d426173652E737667" />size
以上:
我的first test.py来自示例/在演示模式下运行,它为h添加了javascriptighlighting页面操作。

啊!

Seleniumbase是一个一体化的测试自动化框架,它使用WebDriverAPI来旋转Web浏览器,同时使用Pytest或Nose测试来运行测试。

快速启动:

您需要的是python版本

安装/升级pip:

安装了python并在系统路径上,您可以使用:

python -m easy_install -U pip

设置虚拟环境:(可选)

您可能希望使用python虚拟环境来隔离项目之间的python依赖关系。(Seleniumbase Virtualenv教程可以在这里找到,官方Virtualenv教程可以在这里

>安装<Seleniumbase硒硒的安装<硒硒硒的安装。org/pypi/seleniumbase" rel="诺福尔ow">pypi

pip install seleniumbase
  • 添加--upgrade以升级现有安装。
  • 添加--强制重新安装以进行干净的安装。

您还可以从git克隆安装seleniumbase:

git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
  • "pip install-e."也可以从顶级seleniumbase文件夹中使用。

您还可以安装seleniumbase的特定github分支:

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase

下载Web驱动程序:

Seleniumbase可以使用install命令将Web驱动程序下载到Seleniumbase/drivers文件夹:

seleniumbase install chromedriver
  • 对于要在其上运行自动化的每个Web浏览器,您需要一个不同的Web驱动程序:chrome driver对于chrome,edgedriver对于edge,geckodriver对于firefox,operadriver对于opera,iedriver对于Internet Explorer。

在铬合金上运行测试:

cd examples
pytest my_first_test.py --browser=chrome
  • 如果未使用--browser=browser指定chrome,则chrome是默认浏览器
  • 在Linux上,缺省值是havior(运行时没有gui)。你也可以在任何操作系统上以无头模式运行。如果您的Linux机器有一个图形用户界面,并且您希望在运行测试时看到Web浏览器,请添加--headed--gui

查看my_first_test.py查看简单测试的外观:

self.open(URL)# Navigate to the web pageself.click(SELECTOR)# Click a page elementself.update_text(SELECTOR,TEXT)# Type text (Add "\n" to text for pressing enter/return.)self.assert_element(SELECTOR)# Assert element is visibleself.assert_text(TEXT)# Assert text is visible (has optional SELECTOR arg)self.assert_title(PAGE_TITLE)# Assert page titleself.assert_no_404_errors()# Assert no 404 errors from files on the pageself.assert_no_js_errors()# Assert no JavaScript errors on the page (Chrome-ONLY)self.execute_script(JAVASCRIPT)# Execute javascript codeself.go_back()# Navigate to the previous URLself.get_text(SELECTOR)# Get text from a selectorself.get_attribute(SELECTOR,ATTRIBUTE)# Get a specific attribute from a selectorself.is_element_visible(SELECTOR)# Find out if an element is visible on the pageself.is_text_visible(TEXT)# Find out if specific text is visible on the page (optional SELECTOR arg)self.hover_and_click(HOVER_SELECTOR,CLICK_SELECTOR)# Mouseover an element and click another elementself.select_option_by_text(DROPDOWN_SELECTOR,OPTION_TEXT)# Select a dropdown optionself.switch_to_frame(FRAME_NAME)# Switch webdriver control to an iframe on the pageself.switch_to_default_content()# Switch webdriver control out of the current iframeself.switch_to_window(WINDOW_NUMBER)# Switch to a different window/tabself.save_screenshot(FILE_NAME)# Save a screenshot of the current page

有关Seleniumbase方法的完整列表,请参见:help-docs/method\u summary.md

了解更多信息:

自动网络驱动能力:

Seleniumbase会自动处理常见的WebDriver操作,例如在测试失败时启动Web浏览器和保存屏幕截图。(阅读有关自定义测试运行的更多信息

简化代码:

seleniumbase对命令使用简单的语法,例如:

self.update_text("textarea","text")

与常规webdriver相同的命令非常混乱:

pytest my_first_test.py --demo_mode
0

您仍然可以在代码中使用self.driver

在任何浏览器中使用pytestnose运行测试:

强烈建议使用pytest

pytest my_first_test.py --demo_mode
1

在python文件(或包含python文件的文件夹中)上使用pytestnotests时,将自动运行以test/code>开头的python方法。

不再进行片状测试:

seleniumbase方法在与页元素交互之前自动等待页元素完成加载(达到超时限制)。这意味着您不再需要脚本中的随机time.sleep()语句。

自动/手动混合模式:

Seleniumbase包括一个名为masterqa的解决方案,它通过让自动化执行所有浏览器操作来加快手动测试,而手动测试仪则可以DLS验证。

功能丰富:

有关Seleniumbase功能的完整列表,请单击此处

详细说明:

以下是如何在各种Web浏览器上运行示例脚本:

首先,为要使用的每个Web浏览器安装一个Web驱动程序:

pytest my_first_test.py --demo_mode
2

接下来,在pytestnosetests测试跑步者之间进行选择。(基本上可以互换。

pytest my_first_test.py --demo_mode
3

如果未指定浏览器,则默认使用Chrome。) 对于pytest,绿点表示测试通过。"F"表示测试失败。

使用demo模式帮助您查看正在断言的测试。

如果示例测试的移动速度太快,您可以在命令行上添加--demo-mode演示模式运行它,该命令行在操作之间短暂暂停浏览器,突出显示正在操作的页面元素,并让您知道发生了什么测试断言。实时NG:

pytest my_first_test.py --demo_mode

pytest包括测试发现。如果未指定要从中运行的特定文件或文件夹,pytest将根据以下匹配条件自动搜索所有子目录以运行测试: python文件名,以test\u开头或以\u test.py结尾。 以test\u开头的python方法。 python类名可以是任何东西,因为seleniumbase的basecase类继承自unittest.testcase类。 您可以使用:

pytest my_first_test.py --demo_mode
5

您可以在脚本中使用以下内容来帮助您调试问题: (如果使用IPDB,请确保将"-s"添加到命令行选项,除非已经在pytest.ini中存在

pytest my_first_test.py --demo_mode
6

要暂停引发异常或错误的活动测试,请添加--pdb-s

pytest my_first_test.py --demo_mode
7

如果出现故障,上面的代码将使浏览器窗口保持打开状态。(IPDB命令:"n"、"c"、"s"=>;下一步,继续,步骤)。

下面是pytest附带的一些其他有用的命令行选项:

pytest my_first_test.py --demo_mode
8

seleniumbase为测试提供了其他pytest命令行选项:

pytest my_first_test.py --demo_mode
9

(有关更多详细信息,请参见命令行选项的完整列表此处

在测试失败期间,最近一次测试运行的日志和屏幕截图将保存到latest_logs/文件夹中。如果您在命令行选项中添加--archive\u日志,或者在设置中将archive\u现有日志设置为true,则这些日志将移动到存档日志/,否则将记录f在下一次测试运行开始时清理的文件。test_suite.py集合包含故意失败的测试,以便您可以看到日志记录是如何工作的。

python -m easy_install -U pip
0

覆盖seleniumbase/config/settings.py的一个简单方法是使用自定义设置文件。 下面是要添加到测试中的命令行选项:(请参见示例/custom\u settings.py--settings\u file=自定义设置.py (设置包括默认超时值、双因素身份验证密钥、数据库凭据、S3凭据、电子邮件测试API凭据以及测试使用的其他重要设置。)

要将其他数据从命令行传递到测试,请添加--data="any string"。 现在在您的测试中,您可以使用self.data来访问它。

测试目录定制:>

要使用pytest在Seleniumbase repo之外运行测试,您需要根文件夹上的pytest.ini的副本。要使用notests在seleniumbase repo之外运行测试,您需要setup.cfg。(子文件夹应包含一个空白的\u init.py文件。)

作为一个快捷方式,您可以运行seleniumbase mkdir[目录名]来创建一个新文件夹,其中已经包含了必要的文件和一些可以运行的示例测试。例子:

python -m easy_install -U pip
1

创建可视测试套件报告:< /H3>

(注意:pytest和notests的几个命令行参数是不同的)

pytest报告:

使用--html=report.html可以在您的测试套件完成后,为您提供一个指定名称的精美报告。

python -m easy_install -U pip
2

 src=

您还可以使用--junit xml=report.xml来获取XML报表。詹金斯可以使用此文件显示更好的测试报告。

python -m easy_install -U pip
3 鼻部检查报告:

--report选项在您的测试套件完成后为您提供一个漂亮的报告。

python -m easy_install -U pip
4

(注意:您可以添加--show_report以在测试套件完成后立即显示notest报告。只在本地运行测试时使用--show_report因为它会暂停测试运行。)

使用代理服务器:

如果您希望在浏览器测试中使用代理服务器(仅限Chrome和Firefox),可以在命令行中添加--proxy=IP_address:port作为参数。

python -m easy_install -U pip
5

如果要使用的代理服务器需要验证,可以执行以下操作(仅限Chrome):

python -m easy_install -U pip
6

为了简化操作,您可以将常用的代理添加到代理列表中,地址是:port那把钥匙的。

python -m easy_install -U pip
7

更改用户代理:

如果要更改浏览器测试的用户代理(仅限Chrome和Firefox),可以在命令行中添加--agent="user agent string"作为参数。

python -m easy_install -U pip
8

网站导游:

了解(在examples/tour-examples文件夹中)有关seleniumbase交互式演练的信息。这是一个伟大的原型网站登入经验。请参见"https://github.com/seleniumbase/seleniumbase/blob/master/examples/tour-examples/readme.md" rel="nofollow">教程自述了解更多详细信息。

生产环境和集成:

以下是为测试设置生产环境时可以执行的一些操作:

  • 您可以设置ajenkins生成服务器,以便定期运行测试。Jenkins有许多可用的插件,如xvfb headless browser插件,用于在没有图形用户界面的机器上运行测试。如果xvfb在后台运行,则可以将--headless添加到run命令中,以便利用它。有关xvfb插件的更多信息,请阅读本文。对于一个实际的jenkins无头浏览器自动化示例,请查看seleniumbase google cloud readme

  • 您可以使用SeleniumHq/selenium/wiki/grid2 rel="nofollow">Selenium网格通过在多台具有并行执行的计算机上分发测试来缩放测试。为此,请查看Seleniumbase文件夹,该文件夹应包含您需要的所有内容。Selenium网格自述文件将帮助您入门。

  • 如果您使用seleniumbase mysql功能保存在服务器计算机上运行的测试结果,则可以安装mysql工作台来帮助您重新获得从数据库中更轻松地编写数据。有关详细信息,请参见stackoverflowstackoverflow

  • 如果使用slack,您可以通过使用jenkins slack plugin轻松显示jenkins作业的结果。从您的测试向slack发送消息的另一种方法是使用slack的传入webhooks api。

  • 如果您使用的是aws,您可以设置一个amazon s3帐户,用于保存日志文件和屏幕截图以备将来查看。Seleniumbase已经有了连接到S3所需的所有代码。您需要修改settings.py,其中包含到您的实例的连接详细信息以及您希望在s3中保存日志文件的位置。运行测试时,还需要在命令行中添加"--with-s3"日志记录

下面是启用其他功能运行测试的示例:

python -m easy_install -U pip
9

(注意:如果您没有配置mysql或3个连接位于设置中。py,不要使用--with-db\u reporting--with-s3\u logging

使用testing_base插件时,如果测试失败,basic_test_info插件会记录测试日志,page_source插件会记录测试所看到的最后一个web页面的page source,screen_shots插件会记录测试所看到的最后一个页面出现故障的图像。确保每次包含记录测试数据的插件时都包含testing_base。db_reporting插件记录mysql数据库中运行的所有测试的状态。S3_日志插件将基本测试信息、屏幕截图和页面源上传到S3存储文件夹中。

为了简化这个长时间运行的命令,您可以创建一个*.cfg文件,例如示例中提供的文件,并在其中输入您的插件,这样您就可以通过键入:

pip install seleniumbase
0

通过使用setup.cfg文件(如examples文件夹中为您提供的文件),可以进一步简化这一过程。如果您从setup.cfg所在的文件夹中启动测试运行,该文件将自动用作您的配置,这意味着您不必每次运行测试时都键入要使用的所有插件(或包括配置文件)。

如果告诉pytest/nosetests运行整个文件,它将运行该python文件中以"test"开头的每个方法。您可以通过执行以下操作来更具体地了解运行什么:(请注意,pytest和nosetests的语法是不同的。

pip install seleniumbase
1

让我们尝试一个失败的测试示例:

pip install seleniumbase
2

您可以从examples文件夹运行它,如下所示:

pip install seleniumbase
3

您会注意到,创建了一个日志文件夹"最新日志",用于保存有关失败测试的信息和屏幕截图。看看你得到了什么。记住,如果在run命令中包含了必要的插件(并且正确设置了必要的连接),那么这些数据可以保存在mysql数据库和s3中。对于将来的测试运行,如果您在settings.py中将现有的存档日志设置为true,则以前的测试结果将存储在存档的日志文件夹中。

详细的方法规范和示例:

导航到网页(和相关命令)

pip install seleniumbase
4

protip™:您可能需要使用get_page_source()方法和python的find()命令来解析源代码,以找到selenium无法找到的内容。(为此,您可能需要提高python编程技能。) EX:

pip install seleniumbase
5

单击

单击页面上的元素:

pip install seleniumbase
6

protip™:在大多数Web浏览器中,您可以右键单击页面并选择inspect element以查看创建自己的脚本所需的CSS选择器详细信息。

键入文本

self.update_text(selector,text)使用指定值更新来自指定元素的文本。如果元素丢失或文本字段不可编辑,则会引发异常。例子:

pip install seleniumbase
7

您也可以使用self.add_tex t()或webdriver.send_keys()命令,但这些命令不会清除tex如果里面已经有文本,请先用T框。 如果你想输入特殊的键,那也很简单。下面是一个示例:

pip install seleniumbase
8

从页面上的元素获取文本

pip install seleniumbase
9

从页面上的元素获取属性值
git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
0

在几秒钟内断言页面上某个元素的存在:

git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
1

(注意:您也可以使用:self.assert_element_present(element)

在几秒钟内断言页面上元素的可见性:

git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
2

(注意:它的简短版本是self.find_element(element)self.assert_element(element)。find_element()版本返回元素)

由于上面的行返回元素,您可以将其与.click()组合,如下所示:

git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
3

protip™:您可以使用点来表示类名(例如:div.class_name),它是css选择器中的简化版div[class="class_name"]

您还可以使用*=在css选择器中搜索任何部分值,如下所示:

git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
4

在几秒钟内断言页面元素中文本的可见性:

git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
5

(注意:self.查找文本(文本,元素)self.等待文本(文本,元素)也执行此操作。为了与背景词兼容,保留了较旧的方法名,但默认超时可能不同。)

断言任何内容
git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
6

有用的条件语句(有创造性的例子在起作用)

元素是否可见(选择器)是页面上可见的元素

git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
7

元素是否存在(选择器)是页面上存在的元素

git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
8

另一个例子:

git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop
9

文本是否可见(文本,选择器)文本是否在页面上可见

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase
0

切换选项卡

如果您的测试打开了一个新的选项卡/窗口,而现在您有多个页面呢?没问题。您需要指定当前要使用的selenium。在选项卡/窗口之间切换很容易: EX:

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase
1

protip™:iframe遵循与新窗口相同的原则-如果要对其中的某些内容执行操作,则需要指定iframe EX:

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase
2

处理弹出警报

如果你的测试在你的浏览器中弹出一个警告呢?没问题。你需要切换到它,要么接受它,要么放弃它: EX:

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase
3

如果在尝试接受或解除警报之前不确定是否存在警报,一种处理方法是将警报处理代码包装在try/except块中。其他方法,如.text和.send_keys()也可用于警报。

执行自定义jquery脚本:

jquery是一个强大的javascript库,允许您在web浏览器中执行高级操作。 如果您所在的网页已加载jquery,则可以立即开始执行jquery脚本。 你会知道这一点,因为网页在html中会包含如下内容:

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase
4

如果您想在一个还没有加载jquery的页面上使用jquery,这是可以的。为此,请先运行以下命令:

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase
5

有些网站有限制性的内容安全策略,以防止用户将jquery和其他外部库加载到网站上。如果您需要在这样的网站上使用jquery或其他js库,请在命令行中添加--disable-csp

下面是在脚本中使用jquery的一些示例:

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase
6

在下面的示例中,javascript用于在页面上放置代码,然后selenium可以在该页面上进行触摸:

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase
7

(由于流行的需求,这个流量生成示例已经用self.generate_referration(起始页,结束页)self.generate_traffic(起始页,结束页,循环)方法烘焙到Seleniumbase中。

使用延迟asserTS:< >

假设您希望在单个测试中验证网页上的多个不同元素,但在同时验证多个元素之前,您不希望测试失败,这样您就不必重新运行测试以在同一页上找到更多缺少的元素。这就是延迟索赔的原因。下面是示例:

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase
8

delayed_assert_element()delayed_assert_text()将保存将引发的任何异常。 要将所有失败的延迟断言刷新为单个异常,请确保在测试方法结束时调用self.process_delayed_asserts()。如果测试命中多个页面,则可以在一个页面的所有延迟断言结束时调用self.process_delayed_asserts()。这样,日志文件中的屏幕截图将显示延迟断言的生成位置。

访问原始webdriver

如果您需要访问标准webdriver附带的任何命令,可以这样直接调用它们:

pip install git+https://github.com/seleniumbase/SeleniumBase.git@master#egg=seleniumbase
9

(通常,如果可用,您将希望使用Seleniumbase版本的方法。)

自动重试失败的测试

您可以使用--reruns num多次重试失败的测试。使用--reruns delay seconds在两次重试之间等待多秒。例子:

seleniumbase install chromedriver
0

此外,您可以使用@retry_on_exception()decorator来专门重试失败的方法。(第一次导入:从Seleniumbase导入装饰符)若要了解有关Seleniumbase装饰符的详细信息,请单击此处

电子邮件测试/检查电子邮件:

假设您有一个发送电子邮件的测试,现在您要检查电子邮件是否已收到:

seleniumbase install chromedriver
1

现在,如果要查找特定文本或导航到其中列出的链接,您可以通过电子邮件进行分析。

总结

恭喜你开始使用硒软糖!

问题或评论?
在https://gitter.im/seleniumbase/seleniumbase上加入聊天

如果你看到什么,就说什么!我们非常积极地解决问题。CLOSED ISSUES

https://github.com/mdmintz


mit licenseA>P>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Android上已连接音频输入设备的java列表   java是创建类的新对象还是使用静态方法?   Java:Shift/Rotate对象数组   Java Casting ArrayIterator<Object>   在java中返回布尔值时出错   无法确定文本文件读入程序(java)中的各种元素   Java Swing JToolBar   JAVAlang.IllegalStateException执行Ghost4J(Linux 32对64位)   jvm如何增加ubuntu系统的java堆化?   java CORS策略“AccessControlAllowOrigin”(Anguar 8和Servlet)   使用dagger 2的java视图依赖项注入   单元测试中RxJava的java模拟活动生命周期   arraylist中的Java打印字符串   java返回值显示为0.0。为什么会这样?   java是clientserver应用程序所必需的MVC吗?   ByteToMessageDecoder类中的java内存泄漏   java将大量文档写入firestore   GWT项目中的java TomcatMaven插件。两者之间的区别是什么:org。科德豪斯。魔咒和组织。阿帕奇。公猫maven插件   java swing:向JTree项添加自定义图形按钮