分布式编程

分布式编程 查看完整档案

北京编辑  |  填写毕业院校  |  填写所在公司/组织 zthinker.com 编辑
编辑

技术分享,并发,分布式,java,Redis基础教程,Python基础教程

个人动态

分布式编程 发布了文章 · 5月31日

Selenium IDE使用指南七(参数定义)

[](#alerttext)alertText

名称:alertText

描述:要检查的文字


[](#answer)answer

名称:answer

描述:响应弹出提示而给出的答案。


[](#attributelocator)attributeLocator

名称:attributeLocator

描述:元素定位符,后跟一个@符号,然后是属性名称,例如“ foo @ bar”。


[](#arrayvariablename)arrayVariableName

名称:arrayVariableName

描述:包含JavaScript数组的变量的名称。


[](#conditionalexpression)conditionalExpression

名称:conditionalExpression

描述:返回一个布尔结果以用于控制流命令的JavaScript表达式。


[](#coord)coord

名称:coord string

description:指定鼠标事件相对于从定位器找到的元素的x,y位置(例如-10,20)。


[](#expectedvalue)expectedValue

名称:expectedValue

描述:您希望变量包含的结果(例如,true,false或其他某个值)。


[](#expression)expression

名称:expression

描述:您要存储的值。


[](#formlocator)formLocator

名称:form Locator

描述:要提交的表单的元素定位器。


[](#handle)handle

名称:window handle

描述:代表特定页面(选项卡或窗口)的句柄。


[](#iteratorvariablename)iteratorVariableName

名称:迭代器变量名称

描述:在循环控制流命令中迭代集合时使用的变量名称(例如,每个变量)。


[](#json)json

名称:json

description:JavaScript对象的字符串表示形式。


[](#keysequence)keySequence

名称:按键序列

描述:可以键入的键序列可用于发送键击(例如$ {KEY_ENTER})。


[](#locator)locator

名称:定位器

描述:元素定位器。


[](#locatorofdragdestinationobject)locatorOfDragDestinationObject

名称:拖动目标对象的定位器

描述:元素的定位器,其位置(例如,其中最中心的像素)将成为要拖动的对象的定位器被放置的点。


[](#locatorofobjecttobedragged)locatorOfObjectToBeDragged

名称:要拖动的对象的定位器

描述:要拖动的元素的定位器。


[](#looplimit)loopLimit

名称:循环限制

描述:可选参数,指定循环控制流命令可以执行的最大次数。这样可以防止无限循环。默认值设置为1000。


[](#message)message

名称:message

描述:要打印的消息。


[](#optionlocator)optionLocator

名称:选项

描述:一个选项定位器,通常只是一个选项标签(例如“ John Smith”)。


[](#pattern)pattern

名称:text

描述:完全匹配的字符串。正在支持模式匹配。有关详细信息,请参见https://github.com/SeleniumHQ/selenium-ide/issues/141


[](#region)region

名称:地区

描述:指定一个具有坐标和长度的矩形(例如,“ x:257,y:300,宽度:462,高度:280”)。


[](#resolution)resolution

名称:分辨率

描述:使用WidthxHeight指定窗口分辨率。(例如1280x800)。


[](#script)script

名称:脚本

描述:要运行的JavaScript代码段。


[](#selectlocator)selectLocator

名称:选择定位器

描述:标识下拉菜单的元素定位器。


[](#testcase)testcase

名称:测试用例

描述:项目中的测试用例名称。


[](#text)text

名称:文字

说明:要使用的文字。


[](#times)times

名称:times

描述:控制流循环将执行其块内命令的尝试次数。


[](#url)url

名称:url

description:要打开的URL(可以是相对的或绝对的)。


[](#value)value

名称:值

描述:要输入的值。


[](#variablename)variableName

名称:变量名

描述:不带括号的变量名称。


[](#waittime)waitTime

名称:等待时间

描述:等待时间(以毫秒为单位)。


[](#xpath)xpath

名称:xpath

描述:要评估的xpath表达式。


  1. Selenium IDE使用指南一(爬虫脚本录制器)
  2. Selenium IDE使用指南二(命令行运行器)
  3. Selenium IDE使用指南三(控制流)
  4. Selenium IDE使用指南四(代码导出)
  5. Selenium IDE使用指南五(常见问题)
  6. Selenium IDE使用指南六(指令列表)
  7. Selenium IDE使用指南七(参数定义)

作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.分布式编程

查看原文

赞 0 收藏 0 评论 0

分布式编程 发布了文章 · 5月30日

Selenium IDE使用指南六(指令列表)

[](#add-selection)add selection

将选择添加到多选元素中的选项集。

论点

[](#answer-on-next-prompt)answer on next prompt

影响下一个警报提示。此命令将向其发送指定的答案字符串。如果警报已存在,请改用“可见提示时的webdriver回答”。

论点

  • 答案:提示弹出窗口时给出的答案。
    • *

[](#assert)assert

检查变量是否为期望值。变量的值将转换为字符串以进行比较。如果断言失败,则测试将停止。

论点

[](#assert-alert)assert alert

确认已使用提供的文本呈现警报。如果断言失败,则测试将停止。

论点

[](#assert-checked)assert checked

确认目标元素已被检查。如果断言失败,则测试将停止。

论点

[](#assert-confirmation)assert confirmation

确认已提交确认。如果断言失败,则测试将停止。

论点

  • text:要使用的文本。
    • *

[](#assert-editable)assert editable

确认目标元素是可编辑的。如果断言失败,则测试将停止。

论点

[](#assert-element-present)assert element present

确认目标元素存在于页面上的某处。如果断言失败,则测试将停止。

论点

[](#assert-element-not-present)assert element not present

确认目标元素不在页面上任何地方。如果断言失败,则测试将停止。

论点

[](#assert-not-checked)assert not checked

确认尚未检查目标元素。如果断言失败,则测试将停止。

论点

[](#assert-not-editable)assert not editable

确认目标元素不可编辑。如果断言失败,则测试将停止。

论点

[](#assert-not-selected-value)assert not selected value

确认下拉元素中所选选项的value属性不包含提供的值。如果断言失败,则测试将停止。

论点

[](#assert-not-text)assert not text

确认元素的文本不包含提供的值。如果断言失败,则测试将停止。

论点

[](#assert-prompt)assert prompt

确认已呈现JavaScript提示。如果断言失败,则测试将停止。

论点

  • text:要使用的文本。
    • *

[](#assert-selected-value)assert selected value

确认下拉元素中所选选项的value属性包含提供的值。如果断言失败,则测试将停止。

论点

[](#assert-selected-label)assert selected label

确认下拉菜单中所选选项的标签包含提供的值。如果断言失败,则测试将停止。

论点

[](#assert-text)assert text

确认元素的文本包含提供的值。如果断言失败,则测试将停止。

论点

[](#assert-title)assert title

确认当前页面的标题包含提供的文本。如果断言失败,则测试将停止。

论点

[](#assert-value)assert value

确认输入字段的(空白修饰)值(或其他带有value参数的值)。对于复选框/单选元素,根据是否选中该元素,其值为“ on”或“ off”。如果断言失败,则测试将停止。

论点

[](#check)check

检查一个切换按钮(复选框/单选)。

论点

[](#choose-cancel-on-next-confirmation)choose cancel on next confirmation

影响下一个确认警报。此命令将取消它。如果警报已经存在,则使用“ webdriver选择在可见确认时取消”。


[](#choose-cancel-on-next-prompt)choose cancel on next prompt

影响下一个警报提示。此命令将取消它。如果警报已经存在,则使用“ webdriver在可见的提示下选择取消”。


[](#choose-ok-on-next-confirmation)choose ok on next confirmation

影响下一个确认警报。此命令将接受它。如果警报已经存在,请改用“ Webdriver在可见确认中选择确定”。


[](#click)click

单击目标元素(例如,链接,按钮,复选框或单选按钮)。

论点

[](#click-at)click at

单击目标元素(例如,链接,按钮,复选框或单选按钮)。坐标是相对于目标元素的(例如,0,0是元素的左上角),并且主要用于检查在其上传递的效果,例如材料波纹效果。

论点

  • locator:元素定位器。
  • 坐标字符串:指定鼠标事件相对于从定位器找到的元素的x,y位置(例如-10,20)。
    • *

[](#close)close

关闭当前窗口。无需关闭初始窗口,IDE会重新使用它;关闭它可能会导致测试性能下降。


[](#debugger)debugger

中断执行并进入调试器


[](#do)do

创建一个至少执行一次执行命令的循环。使用repeat if命令终止分支。


[](#double-click)double click

双击元素(例如,链接,按钮,复选框或单选按钮)。

论点

[](#double-click-at)double click at

双击目标元素(例如,链接,按钮,复选框或单选按钮)。坐标是相对于目标元素的(例如,0,0是元素的左上角),并且主要用于检查在其上传递的效果,例如材料波纹效果。

论点

  • locator:元素定位器。
  • 坐标字符串:指定鼠标事件相对于从定位器找到的元素的x,y位置(例如-10,20)。
    • *

[](#drag-and-drop-to-object)drag and drop to object

拖动一个元素并将其拖放到另一个元素上。

论点

  • 要拖动的对象的定位器:要拖动的元素的定位器。
  • 拖动目标对象的定位器:放置元素(其位置(例如,其中的最中心像素)将成为要拖动的对象的定位器)的点的定位器。
    • *

[](#echo)echo

将指定的消息打印到Selenese表中的第三个表单元格中。对于调试很有用。

论点

[](#edit-content)edit content

设置内容可编辑元素的值,就像您在其中键入一样。

论点

[](#else)else

if块的一部分。如果不满足if和/或else if条件,请在此分支中执行命令。使用end命令终止分支。


[](#else-if)else if

if块的一部分。如果不满足if条件,请在此分支中执行命令。使用end命令终止分支。

论点

  • 条件表达式:JavaScript表达式,它返回布尔值以用于控制流命令。
    • *

[](#end)end

终止控制流块是否为时,为时和为时间。


[](#execute-script)execute script

在当前选定的框架或窗口的上下文中执行一段JavaScript。脚本片段将作为匿名函数的主体执行。要存储返回值,请使用“ return”关键字,并在值输入字段中提供一个变量名称。

论点

[](#execute-async-script)execute async script

在当前选定的框架或窗口的上下文中执行JavaScript的异步代码段。该脚本片段将作为匿名函数的主体执行,并且必须返回Promise。如果您使用'return'关键字,则Promise结果将保存在变量中。

论点

[](#for-each)for each

创建一个循环,为给定集合中的每个项目执行执行命令。

论点

[](#if)if

在测试中创建一个条件分支。使用end命令终止分支。

论点

  • 条件表达式:JavaScript表达式,它返回布尔值以用于控制流命令。
    • *

[](#mouse-down)mouse down

模拟用户按下鼠标左键(尚未释放它)。

论点

[](#mouse-down-at)mouse down at

模拟用户在指定位置按下鼠标左键(尚未释放它)。

论点

  • locator:元素定位器。
  • 坐标字符串:指定鼠标事件相对于从定位器找到的元素的x,y位置(例如-10,20)。
    • *

[](#mouse-move-at)mouse move at

模拟用户在指定元素上按下鼠标按钮(尚未释放它)。

论点

  • locator:元素定位器。
  • 坐标字符串:指定鼠标事件相对于从定位器找到的元素的x,y位置(例如-10,20)。
    • *

[](#mouse-out)mouse out

模拟用户将鼠标指针从指定元素移开。

论点

[](#mouse-over)mouse over

模拟用户将鼠标悬停在指定元素上。

论点

[](#mouse-up)mouse up

模拟当用户释放鼠标按钮时发生的事件(例如,停止按住按钮)。

论点

[](#mouse-up-at)mouse up at

模拟当用户在指定位置释放鼠标按钮(例如,停止按住按钮时)时发生的事件。

论点

  • locator:元素定位器。
  • 坐标字符串:指定鼠标事件相对于从定位器找到的元素的x,y位置(例如-10,20)。
    • *

[](#open)open

打开URL,然后等待页面加载,然后继续。这既接受相对URL,也接受绝对URL。

论点

  • url:要打开的URL(可以是相对的或绝对的)。
    • *

[](#pause)pause

等待指定的时间。

论点

[](#remove-selection)remove selection

使用选项定位器从多选元素中的一组选定选项中删除一个选择。

论点

  • locator:元素定位器。
  • option:一个选项定位器,通常只是一个选项标签(例如“ John Smith”)。
    • *

[](#repeat-if)repeat if

有条件地终止“执行”控制流分支。如果提供的条件表达式的结果为true,则它将开始do循环。否则,它将结束循环。

论点

  • 条件表达式:JavaScript表达式,它返回布尔值以用于控制流命令。
    • *

[](#run)run

从当前项目运行测试用例。

论点

[](#run-script)run script

在当前测试窗口的主体中创建一个新的“ script”标记,并将指定的文本添加到命令主体中。请注意,这些脚本标记中引发的JS异常不是由Selenium管理的,因此,如果脚本有可能引发异常,则应该将脚本包装在try / catch块中。

论点

  • script:要运行的JavaScript代码段。
    • *

[](#select)select

使用选项定位器从下拉菜单中选择一个元素。选项定位符提供了指定选择元素的不同方法(例如,label =,value =,id =,index =)。如果未提供选项定位符前缀,则将尝试在标签上进行匹配。

论点

  • select locator:标识下拉菜单的元素定位器。
  • option:一个选项定位器,通常只是一个选项标签(例如“ John Smith”)。
    • *

[](#select-frame)select frame

在当前窗口中选择一个框架。您可以通过从0开始的索引号来选择帧(例如,选择“ index = 0”的第一帧或“ index = 2”的第三帧)。对于嵌套框架,您将需要多次调用此命令(对树中的每个框架都必须调用一次,直到到达所需的框架为止)。您可以使用“ relative = parent”选择父框架。要返回页面顶部,请使用“ relative = top”。

论点

[](#select-window)select window

使用窗口定位器选择弹出窗口。选择弹出窗口后,所有命令都将转到该窗口。窗口定位器使用手柄选择窗口。

论点

  • 窗口句柄:代表特定页面(选项卡或窗口)的句柄。
    • *

[](#send-keys)send keys

模拟指定元素上的击键事件,就像您按键键入值一样。这模拟真实用户在指定字符串中键入每个字符;它也受到实际用户的限制,例如不能键入不可见或只读元素。这对于需要显式键事件的动态UI小部件(如自动完成组合框)很有用。与简单的“类型”命令直接将指定的值强制进入页面不同,该命令不会替换现有内容。

论点

  • locator:元素定位器。
  • 按键序列:可以键入的按键序列可用于发送按键(例如$ {KEY_ENTER})。
    • *

[](#set-speed)set speed

设置执行速度(例如,设置每次Selenium操作之后的延迟的毫秒长度)。默认情况下,不存在此类延迟,例如,延迟为0毫秒。此设置是全局设置,将影响所有测试运行,直到更改。

论点

[](#set-window-size)set window size

设置浏览器的窗口大小,包括浏览器的界面。

论点

  • resolution:使用WidthxHeight指定窗口分辨率。(例如1280x800)。
    • *

[](#store)store

将目标字符串另存为变量,以方便重用。

论点

[](#store-attribute)store attribute

获取元素属性的值。在不同的浏览器中,属性的值可能有所不同(例如,“样式”属性就是这种情况)。

论点

[](#store-json)store json

未定义

论点

[](#store-text)store text

获取元素的文本并将其存储以备后用。这适用于任何包含文本的元素。

论点

[](#store-title)store title

获取当前页面的标题。

论点

[](#store-value)store value

获取element的值并将其存储以供以后使用。这适用于任何输入类型元素。

论点

[](#store-window-handle)store window handle

获取当前页面的句柄。

论点

  • 窗口句柄:代表特定页面(选项卡或窗口)的句柄。
    • *

[](#store-xpath-count)store xpath count

获取与指定xpath匹配的节点数(例如,“ // table”将给出表数)。

论点

[](#submit)submit

提交指定的表格。这对于没有提交按钮的表单特别有用,例如单输入“搜索”表单。

论点

[](#times)times

创建一个循环执行n次执行命令。

论点

  • times:控制流循环将执行其块内命令的尝试次数。
  • 循环限制:一个可选参数,指定循环控制流命令可以执行的最大次数。这样可以防止无限循环。默认值设置为1000。
    • *

[](#type)type

设置输入字段的值,就像您在其中键入一样。也可以用于设置组合框,复选框等的值。在这种情况下,value应该是所选选项的值,而不是可见的文本。仅限Chrome:如果给出了文件路径,它将被上传到输入(对于type = file),注意:不支持XPath定位器。

论点

[](#uncheck)uncheck

取消选中切换按钮(复选框/单选)。

论点

[](#verify)verify

软断言变量是期望值。变量的值将转换为字符串以进行比较。即使验证失败,测试也将继续。

论点

[](#verify-checked)verify checked

软断言已选中切换按钮(复选框/单选)。即使验证失败,测试也将继续。

论点

[](#verify-editable)verify editable

软断言指定的输入元素是否可编辑(例如,尚未禁用)。即使验证失败,测试也将继续。

论点

[](#verify-element-present)verify element present

软断言指定的元素在页面上的某处。即使验证失败,测试也将继续。

论点

[](#verify-element-not-present)verify element not present

软断言指定的元素不在页面上。即使验证失败,测试也将继续。

论点

[](#verify-not-checked)verify not checked

软断言未选中切换按钮(复选框/单选)。即使验证失败,测试也将继续。

论点

[](#verify-not-editable)verify not editable

软断言指定的输入元素是否不可编辑(例如,尚未禁用)。即使验证失败,测试也将继续。

论点

[](#verify-not-selected-value)verify not selected value

软断言所期望的元素尚未在其选择属性的选择菜单中选择。即使验证失败,测试也将继续。

论点

  • select locator:标识下拉菜单的元素定位器。
  • option:一个选项定位器,通常只是一个选项标签(例如“ John Smith”)。
    • *

[](#verify-not-text)verify not text

软断言元素的文本不存在。即使验证失败,测试也将继续。

论点

  • locator:元素定位器。
  • text:要使用的文本。
    • *

[](#verify-selected-label)verify selected label

对指定的select元素中的选定选项进行软断言。即使验证失败,测试也将继续。

论点

[](#verify-selected-value)verify selected value

软断言所期望的元素已通过其选项属性在选择菜单中选择。即使验证失败,测试也将继续。

论点

  • select locator:标识下拉菜单的元素定位器。
  • option:一个选项定位器,通常只是一个选项标签(例如“ John Smith”)。
    • *

[](#verify-text)verify text

软断言元素的文本存在。即使验证失败,测试也将继续。

论点

  • locator:元素定位器。
  • text:要使用的文本。
    • *

[](#verify-title)verify title

软断言当前页面的标题包含提供的文本。即使验证失败,测试也将继续。

论点

  • text:要使用的文本。
    • *

[](#verify-value)verify value

软断言输入字段的(经空白修饰的)值(或带有value参数的其他任何值)。对于复选框/单选元素,根据是否选中该元素,其值为“ on”或“ off”。即使验证失败,测试也将继续。

论点

[](#wait-for-element-editable)wait for element editable

等待元素可编辑。

论点

[](#wait-for-element-not-editable)wait for element not editable

等待元素不可编辑。

论点

[](#wait-for-element-not-present)wait for element not present

等待目标元素不出现在页面上。

论点

[](#wait-for-element-not-visible)wait for element not visible

等待目标元素在页面上不可见。

论点

[](#wait-for-element-present)wait for element present

等待目标元素出现在页面上。

论点

[](#wait-for-element-visible)wait for element visible

等待目标元素在页面上可见。

论点

[](#webdriver-answer-on-visible-prompt)webdriver answer on visible prompt

影响当前显示的警报提示。此命令指示Selenium为它提供指定的答案。如果尚未出现警报,请改用“在下一个提示时回答”。

论点

  • 答案:提示弹出窗口时给出的答案。
    • *

[](#webdriver-choose-cancel-on-visible-confirmation)webdriver choose cancel on visible confirmation

影响当前显示的确认警报。此命令指示Selenium取消它。如果警报尚未出现,请改用“在下次确认时选择取消”。


[](#webdriver-choose-cancel-on-visible-prompt)webdriver choose cancel on visible prompt

影响当前显示的警报提示。此命令指示Selenium取消它。如果警报尚未出现,请改用“在下一个提示时选择取消”。


[](#webdriver-choose-ok-on-visible-confirmation)webdriver choose ok on visible confirmation

影响当前显示的确认警报。此命令指示Selenium接受它。如果警报尚未出现,请改用“在下次确认时选择确定”。


[](#while)while

只要提供的条件表达式为true,就创建一个循环重复执行执行命令的循环。

论点

  • 条件表达式:JavaScript表达式,它返回布尔值以用于控制流命令。
  • 循环限制:一个可选参数,指定循环控制流命令可以执行的最大次数。这样可以防止无限循环。默认值设置为1000。
    • *
  1. Selenium IDE使用指南一(爬虫脚本录制器)
  2. Selenium IDE使用指南二(命令行运行器)
  3. Selenium IDE使用指南三(控制流)
  4. Selenium IDE使用指南四(代码导出)
  5. Selenium IDE使用指南五(常见问题)
  6. Selenium IDE使用指南六(指令列表)
  7. Selenium IDE使用指南七(参数定义)

作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.分布式编程

查看原文

赞 0 收藏 0 评论 0

分布式编程 发布了文章 · 5月29日

Selenium IDE使用指南五(常见问题)

[](#how-do-i-record-hovers)如何记录悬停?

鼠标悬停(aka悬停)操作很难作为记录周期的一部分自动捕获。

要在您的测试中添加鼠标悬停,需要进行一些手动干预。您可以通过两种不同的方式来做到这一点。

选项1:在录制时添加

  1. 录制时,右键单击要悬停的元素
  2. 在出现的菜单中,单击Selenium IDE,然后Mouse Over
  3. 确认Mouse Over测试步骤在测试中的正确位置(如果需要,将其拖放到其他位置)

选项2:在测试编辑器中手动添加

  1. 右键单击IDE中的测试步骤
  2. 选择 Insert new command
  3. 输入mouse overCommand输入字段
  4. Target输入字段中输入要悬停的定位器(或单击Select target in page并选择要悬停的元素)

[](#why-don-t-numbers-that-are-typed-into-a-date-input-field-appear-correctly)为什么在日期输入字段中键入的数字不能正确显示?

通过Selenium IDE的命令行运行器运行测试时,会出现此问题。

要绕开它,您将需要启用w3c模式,您可以通过-c "chromeOptions.w3c=true"在启动运行程序时传递来进行此操作。

启用w3c模式会影响Selenium Actions的性能(如果您的测试最终使用它们)是毫无价值的,因此仅当日期输入字段存在问题时才使用此模式。

[](#how-do-i-get-the-ide-to-wait-for-a-certain-condition-to-be-true-before-proceeding)我如何让IDE等待特定条件成立才能继续进行?

在某些情况下,IDE中的内置等待策略还不够。发生这种情况时,可以使用可用的显式等待命令之一。

  • wait for element editable
  • wait for element present
  • wait for element visible
  • wait for element not editable
  • wait for element not present
  • wait for element not visible

[](#how-can-i-use-regex-in-text-verifications)如何在文本验证中使用正则表达式?

这是我们最终将要添加的功能(有关详细信息,请参阅问题141)。解决方法是,可以将XPath定位器与starts-withcontains关键字一起使用。

command    assertElementPresent
target    //a@[starts-with(.,'you are the') and contains(.,'User to log in today')]

[](#how-do-i-scroll)我如何滚动?

Selenium IDE中没有用于滚动的独特命令,因为Selenium中没有实现任何命令。相反,您可以使用scrollToJavaScript中的命令通过指定xy滚动到所需坐标来完成此任务。

command    executeScript
target    window.scrollTo(0,1000)

[](#saving-files)保存文件

[](#why-is-the-location-i-saved-my-side-project-to-not-remembered)为什么我保存SIDE项目的位置不记得了?

[](#why-do-i-need-to-step-through-a-save-as-flow-everytime-i-want-to-save-my-project)为什么每次要保存项目时都需要逐步执行“另存为”流程?

[](#why-do-i-need-to-overwrite-a-previously-saved-file)为什么需要覆盖以前保存的文件?

所有这些问题都是同一个问题的一部分-因为浏览器扩展Selenium IDE不能访问文件系统。提供“保存”功能的唯一方法是通过下载文件。当IDE移至本机应用程序时,将解决此问题。这将使IDE具有首要的文件系统访问权限,从而使它能够提供优美的“保存”体验。

如果要保持更新,可以按照问题363进行操作

[](#how-to-install-the-ide-behind-strict-proxy-firewall)如何在严格的代理/防火墙后面安装IDE?

在某些情况下,您可能没有完全的公共Internet访问权限(例如,在“公司代理或防火墙”后面)。在这些环境中,您将需要获取内置的Selenium IDE ZIP文件的副本,以便记录自动测试脚本。可以在GitHub的“发布”部分中找到:

https://github.com/SeleniumHQ/selenium-ide/releases

并非所有版本都包含“ selenium-ide.zip”,因为其中一些仅仅是“源代码”版本。查找具有此zip文件的最新版本。这意味着它是提交给Chrome和Firefox商店的最新版本。

[](#officially-signed-versions)正式签署的版本

从项目发行页面下载zip文件可为您提供未签名的ZIP文件。或者,您可以从以下位置获取经过正式签名的安装程序,这些安装程序可以在“安全环境”中更好地发挥作用:

注意:如果您已经安装了插件(例如,在便携式计算机上尝试获取安装程序的副本),则在尝试访问它们时只会看到“删除”按钮。因此,将它们删除一次,让安装程序移至另一台未连接的计算机,然后根据需要在主设备的浏览器中重新安装。

注意:您不能直接从Chrome商店中获取“ .crx”文件。相反,您需要在本地安装一次,然后转到计算机上的安装目录以进行检索。

[](#why-does-no-save-dialog-appear-once-a-plugin-is-attached)附加了插件后,为什么没有保存对话框出现?

由于当前的Chrome错误,如果您不答复Selenium IDE发出的消息,则不会进行进一步处理。为了解决此问题,请确保侦听emit该实体的操作project并使用进行回复undefined

chrome.runtime.onMessageExternal.addListener((message, sender, sendResponse) => {
  if (message.action === "emit" && message.entity === "project") {
    sendResponse(undefined);
  }
});
    
  1. Selenium IDE使用指南一(爬虫脚本录制器)
  2. Selenium IDE使用指南二(命令行运行器)
  3. Selenium IDE使用指南三(控制流)
  4. Selenium IDE使用指南四(代码导出)
  5. Selenium IDE使用指南五(常见问题)
  6. Selenium IDE使用指南六(指令列表)
  7. Selenium IDE使用指南七(参数定义)

作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.分布式编程

查看原文

赞 0 收藏 0 评论 0

分布式编程 发布了文章 · 5月28日

Selenium IDE使用指南四(代码导出)

[](#getting-started)入门

您可以通过右键单击测试或套件,选择Export,选择目标语言,然后单击,将测试或套件的测试导出到WebDriver代码Export

代码导出右键单击
代码导出菜单

这会将包含导出的目标语言代码的文件保存到浏览器的下载目录中。

[](#origin-tracing-code-comments)原产地跟踪代码注释

导出时,有一个可选的切换开关可启用源跟踪代码注释。

这会将内联代码注释放置在导出的文件中,其中包含有关生成该文件的Selenium IDE中的测试步骤的详细信息。

[](#supported-exports)支持的出口

当前,支持导出到以下语言和测试框架。

  • C#NUnit
  • Java JUnit
  • JavaScript Mocha
  • python pytest

我们打算在每种语言的至少一个测试框架中支持所有官方支持的Selenium编程语言绑定(例如Java,JavaScript,C#,Python和Ruby)。

欢迎提供帮助以添加特定语言的新语言和测试框架。有关如何操作的详细信息,请参见如何贡献

[](#c-nunit)C#NUnit

C#NUnit的导出代码被构建为与.NET Core,NUnit 3.11和最新版本的Selenium一起使用。

要创建一个与NUnit一起使用的新样板项目,请使用以下dotnet new命令。

dotnet new nunit -n NUnit-Tests --framework netcoreapp2.0

使用以下.csproj文件,您可以使用以下dotnet restore命令安装正确的软件包和版本。

<!-- filename: example.csproj -->
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="nunit" Version="3.11.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
    <PackageReference Include="Selenium.Support" Version="4.0.0-alpha03" />
    <PackageReference Include="Selenium.WebDriver" Version="4.0.0-alpha03" />
  </ItemGroup>

</Project>


> dotnet restore example.csproj

[](#c-xunit)C#xUnit

C#xUnit的导出代码被构建为可与C#,xUnit和最新版本的Selenium一起使用。

就像C#Nunit一样,您可以使用dotnet工具安装它,并在安装这些依赖项之后运行它(例如,使用Install-Package Selenium.WebDriveror或dotnet add package Selenium.WebDriver)。

要创建一个与xUnit一起使用的新样板项目,请使用以下dotnet new命令。

> dotnet new xUnitTests

使用以下.csproj文件,您可以使用以下dotnet restore命令安装正确的软件包和版本。

<!-- filename: example.csproj -->
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="xunit" Version="2.4.1" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
    <PackageReference Include="Selenium.Support" Version="4.0.0-alpha03" />
    <PackageReference Include="Selenium.WebDriver" Version="4.0.0-alpha03" />
  </ItemGroup>

</Project>


> dotnet restore example.csproj

[](#java-junit)Java JUnit

Java JUnit的导出代码可与Java 8,JUnit 4.12和最新版本的Selenium一起使用。

您应该能够将导出的Java文件放入带有pom.xml列出这些依赖关系的文件的标准Maven目录结构中并运行它。

这是一个示例pom.xml,可帮助您入门。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-ide-java-code-export</artifactId>
  <version>1</version>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.seleniumhq.selenium</groupId>
      <artifactId>selenium-java</artifactId>
      <version>4.0.0-alpha-3</version>
    </dependency>
  </dependencies>
</project>

[](#javascript-mocha)JavaScript Mocha

JavaScript Mocha的导出代码被构建为与Node 10,Mocha 6.1.x和最新版本的Selenium一起使用。

安装这些依赖项(例如,使用npm install)后,您应该能够获取导出的JavaScript文件并运行它。

这是一个示例package.json,可帮助您入门。

{
  "dependencies": {
    "mocha": "^6.1.4",
    "selenium-webdriver": "^4.0.0-alpha.3"
  }
}

[](#python-pytest)python pytest

Python pytest的导出代码可与Python 3,pytest 4.6.x和最新版本的Selenium一起使用。

安装这些依赖项(例如,使用pip3 install)后,您应该能够获取导出的JavaScript文件并运行它。

这是一个示例requirements.txt,可帮助您入门。

pytest == 4.6.3
selenium == 4.0.0a1


> pip3 install -r ./requirements.txt

[](#ruby-rspec)Ruby RSpec

Ruby Rspec的导出代码可与Ruby 2.6.x,RSpec 3.9.x和最新版本的Selenium一起使用。

通过使用Bundler和以下工具,Gemfile您可以安装必要的依赖项。

# Gemfile
source 'https://rubygems.org'

gem 'selenium-webdriver'
gem 'rspec'


> gem install bunder
> bundle install

[](#how-to-contribute)如何贡献

代码导出以模块化方式构建,以帮助实现贡献。

每种语言和测试框架都有自己的包含要导出代码的包。每个代码段都映射到Selenium IDE中的命令,并且每个程序包都依赖于底层的“核心”程序包,该程序包承担了所有繁重的工作。

以下是在一种已经建立的语言中为一种新语言或一种新的测试框架创建代码的步骤。

[](#1-create-a-new-package)1.创建一个新包

首先,复制一个现有的语言包(例如packages/code-export-java-junit),然后将其重命名(例如,文件夹和文件中的详细信息package.json)为您想要贡献的目标语言和框架(例如packages/code-export-ruby-rspec,等等)。

接下来,添加新的软件包作为依赖于package.jsoncode-export

最后,yarn从项目的根目录运行,然后使用构建项目yarn watch此处提供了进行本地构建的完整详细信息)。

[](#2-update-the-locators-and-commands)2.更新定位器和命令

代码导出的基础是特定于语言的字符串,这些字符串将转换为输出的代码。其中最突出的是命令和定位器策略(例如,“ by”查找的语法)。

对于给定的语言,每种语言都有一个文件,以及随附的测试文件。

您可以在中看到一个示例packages/code-export-java-junit

声明新命令时,可以将其输出指定为字符串,也可以指定指定缩进级别的对象

内置在代码导出中的是一个前缀控件,用于控制输出代码的缩进。如果命令的输出是冗长的并且您想明确显示,则此结构很有用。或者,如果命令更改了紧随其后的命令的缩进级别。

[](#3-create-the-hooks)3.创建钩子

钩子构成了要导出的代码的大部分结构(例如,套件,测试以及其中包含的所有内容,例如设置,拆卸等)。它们还使插件能够将代码导出到测试或套件的不同部分。

有9种不同的钩子:

  • afterAll (所有测试完成后)
  • afterEach(完成每个测试后-之前afterAll
  • beforeAll (在运行所有测试之前)
  • beforeEach(在运行每个测试之前-之后beforeAll
  • command (为插件添加的新命令发出代码)
  • dependency (添加其他语言依赖性)
  • inEachBegin (在每个测试的开始阶段)
  • inEachEnd (在每个测试的末尾)
  • variable (声明将在整个套件中使用的新变量)

您可以在packages/code-export-java-junit此处看到实现钩子的示例:钩子

[](#4-update-the-language-specific-attributes)4.更新语言特定的属性

您需要使用每种语言指定一些底层细节。诸如缩进多少空间,如何声明方法,测试,套件等之类的事情。

您可以在packages/code-export-java-junit此处查看实现此示例:语言特定的选项

[](#5-add-it-to-the-mix)5.将其添加到混合物中

将其他所有内容准备就绪后,就可以将其连接起来以在UI中使用了。

这是可能的packages/code-export/src/index.js

您需要将语言添加到中availableLanguages

[](#6-test-and-tune)6.测试和调整

导出代码的最佳端到端测试是导出一系列测试,并验证它们是否按预期运行。

从开发版本中,您可以访问种子测试。这是验证所有标准库命令都适用于您的新语言的良好起点。

再次测试,修复和测试,直到您对最终结果充满信心。

  1. Selenium IDE使用指南一(爬虫脚本录制器)
  2. Selenium IDE使用指南二(命令行运行器)
  3. Selenium IDE使用指南三(控制流)
  4. Selenium IDE使用指南四(代码导出)
  5. Selenium IDE使用指南五(常见问题)
  6. Selenium IDE使用指南六(指令列表)
  7. Selenium IDE使用指南七(参数定义)

作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.分布式编程

查看原文

赞 0 收藏 0 评论 0

分布式编程 发布了文章 · 5月27日

Selenium IDE使用指南三(控制流)

Selenium IDE附带的命令使您可以添加条件逻辑和循环到测试中。

这使您仅在满足应用程序中的某些条件时才执行命令(或一组命令),或根据预定义的标准重复执行命令。

[](#javascript-expressions)JavaScript表达式

通过使用JavaScript表达式检查应用程序中的条件。

您可以在测试过程中的任何时候使用execute scriptexecute async script命令运行一段JavaScript,并将结果存储在变量中。这些变量可以在控制流命令中使用。

您也可以直接在控制流命令中使用JavaScript表达式。

[](#available-commands)可用命令

控制流命令通过指定打开和关闭命令来表示一组命令(或块)来工作。

以下是每个可用的控制流命令以及它们的伴随命令和/或关闭命令。

  • ifelse ifelseend
  • timesend
  • dorepeat if
  • whileend

让我们逐一介绍示例。

[](#conditional-branching)条件分支

条件分支使您可以更改测试中的行为。

如果示例

[](#if-selenium-ide-docs-en-api-commands-if)if

这是条件块的打开命令。

同时提供了您要评估的JavaScript表达式。这可以包含从测试中的先前JavaScript表达式创建的变量。所有这些都target输入到if命令的输入字段中。

如果该表达式评估为true则测试将执行它后面,直到下一个条件控制流命令命令(例如,else ifelse,或end)。

如果表达式的计算来false将跳过随后的命令和跳转到下一个相关条件控制流命令(例如,else ifelse,或end)。

[](#else-if-selenium-ide-docs-en-api-commands-else-if)else if

该命令在if命令块中使用。

就像iftarget输入字段中使用JavaScript表达式来求值一样,执行它后面的命令分支,或者跳到下一个相关的控制流命令(例如elseend)。

[](#else-selenium-ide-docs-en-api-commands-else)else

else是您在一个if区块中可以拥有的最终条件。如果不满足任何先决条件,则将执行此命令分支。

完成后,将跳转到end命令。

[](#end-selenium-ide-docs-en-api-commands-end)end

该命令终止条件命令块。没有它,命令块将不完整,您将收到一条有用的错误消息,让您知道何时尝试运行测试。

[](#looping)循环播放

循环使您可以遍历给定的命令集。

[](#times-selenium-ide-docs-en-api-commands-times)times

有了times你可以指定一个迭代次数要执行的命令集。该数字进入命令的target输入字段times

要关闭times命令块,请确保使用end命令。

时间示例

[](#do-selenium-ide-docs-en-api-commands-do)do

您从do命令开始此循环,然后是要执行的命令,然后以命令结束repeat ifrepeat if接受您要在target输入字段中求值的JavaScript表达式。

do将先执行之后的命令,然后再对中的表达式repeat if求值。如果表达式返回,true则测试将跳回到do命令并重复该序列。

做例子

这将一直持续到条件返回false或触发无限循环保护-默认为1000尝试。您可以通过valuerepeat if命令的输入字段中指定一个数字来覆盖此默认值。

[](#while-selenium-ide-docs-en-api-commands-while)while

通过while提供JavaScript表达式,您希望在target输入字段中求值。如果它求值到true命令块,则将继续执行直到到达end命令。

完成后,测试将跳回到while命令并重复相同的顺序(首先检查条件是否变为truefalse)。

要关闭while命令块,请使用end命令。

while-example

循环将重试,直到条件返回false或无限循环保护被触发为止(默认为1000尝试)。您可以通过valuewhile命令的输入字段中指定一个数字来覆盖此默认值。

[](#foreach-selenium-ide-docs-en-api-commands-for-each)forEach

尽力做到最好,我们有能力遍历一个集合(例如,一个JS数组),并在我们执行该过程时引用该集合中的每个项目。

在该target字段中,指定包含要迭代的数组的变量的名称。在该value字段中,指定要使用的迭代器变量的名称。对于数组中的每个条目,将执行以下命令。在每次迭代期间,将通过迭代器变量访问当前条目的内容。

每个例子

[](#nesting-commands)嵌套命令

您可以根据需要嵌套控制流命令(例如,一个if块可以放在一个while块内部,反之亦然)。

嵌套示例

[](#syntax-validation)语法验证

如果不确定控制流语法是否正确,请尝试运行测试以查看。IDE将发现控制流语法中的错误,并调出不正确或丢失的特定命令。

错误示例

  1. Selenium IDE使用指南一(爬虫脚本录制器)
  2. Selenium IDE使用指南二(命令行运行器)
  3. Selenium IDE使用指南三(控制流)
  4. Selenium IDE使用指南四(代码导出)
  5. Selenium IDE使用指南五(常见问题)
  6. Selenium IDE使用指南六(指令列表)
  7. Selenium IDE使用指南七(参数定义)

作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.分布式编程

查看原文

赞 0 收藏 0 评论 0

分布式编程 发布了文章 · 5月26日

Selenium IDE使用指南二(命令行运行器)

现在,您可以在任何浏览器上,并行和在Grid上运行所有Selenium IDE测试,而无需编写任何代码。

只需安装Selenium IDE命令行运行程序,获取必要的浏览器驱动程序(如果在本地运行测试)以及从命令提示符启动具有所需选项的运行程序,就可以了。

命令行运行器样本

[](#prerequisites)先决条件

要使命令行运行程序正常运行,需要以下依赖项:

  • node(Node.js编程语言)版本810
  • npm (NodeJS程序包管理器),通常与 node
  • selenium-side-runner (Selenium IDE命令行运行程序)
  • 以及我们要使用的浏览器驱动程序(在下一节中有更多介绍)

    brew install node
    npm install -g selenium-side-runner

注意:您的系统配置可能与上面的示例中使用的配置不同(例如,MacOS上的Homebrew)。如果是这样,请参阅软件包管理器的Node安装文档,或直接从Node downloads页面下载适用于您操作系统的Node安装程序。

[](#installing-a-browser-driver)安装浏览器驱动程序

如果要在_本地_运行测试_,_则每个浏览器都需要一些其他设置。

Selenium通过一个称为浏览器驱动程序的小型二进制应用程序与每个浏览器进行通信。每个浏览器都有自己的浏览器,您可以手动下载并添加到系统路径,也可以使用程序包管理器安装最新版本的浏览器驱动程序(推荐)。

您还需要在计算机上安装浏览器。

[](#chrome)Chrome

对于Chrome,您需要ChromeDriver

> npm install -g chromedriver

[](#edge)Edge

对于Microsoft Edge,您需要在Windows上运行,并且还需要EdgeDriver

> npm install -g edgedriver

[](#firefox)火狐浏览器

对于Firefox,您需要geckodriver

> npm install -g geckodriver

[](#internet-explorer)IE浏览器

对于Internet Explorer,您需要在Windows上运行,并且还需要IEDriver

> npm install -g iedriver

要使IEDriver工作,还需要一些其他设置。详细信息在这里

[](#safari)苹果浏览器

对于Safari,您需要SafariDriver

它附带了最新版本的Safari。您只需采取几个步骤就可以在计算机上启用它。有关详细信息,请参见SafariDriver文档的本部分

[](#launching-the-runner)Launching the runner

安装selenium-side-runner完所有组件后,只需在命令行中调用测试,然后再调用之前保存的项目文件的路径即可运行测试请参阅 使用指南一。

> selenium-side-runner /path/to/your-project.side

注意:如果您有多个.side文件,则可以使用通配符(例如/path/to/*.side)。

当您运行此命令时,它将在多个浏览器窗口中并行启动测试,并跨n进程分布(这n是计算机上可用CPU内核的数量)。

进程数可以在运行时通过可提供的各种参数进行配置(除其他外)。

注意:并行执行在套件级别自动发生。如果要并行执行套件中的测试,则需要更改一个设置。有关详细信息,请参见套件中的测试并行化

[](#run-time-configuration)运行时配置

使用运行程序,您可以在运行时传递不同的配置参数。

[](#running-on-a-different-browser-locally)在本地不同的浏览器上运行

功能最常见的用途是为本地测试执行指定其他浏览器。

selenium-side-runner -c "browserName=chrome"
selenium-side-runner -c "browserName='internet explorer'"
selenium-side-runner -c "browserName=edge"
selenium-side-runner -c "browserName=firefox"
selenium-side-runner -c "browserName=safari"

注意:在本地运行测试时,每个浏览器都需要进行一些设置。有关详细信息,请参见安装浏览器驱动程序

[](#running-on-selenium-grid)在Selenium Grid上运行

要在网格(例如,您自己的网格或诸如Sauce Labs的托管提供程序)上运行测试,可以指定它以及其他功能。

selenium-side-runner --server http://localhost:4444/wd/hub -c "browserName='internet explorer' version='11.0' platform='Windows 8.1'"

--server指定网格的URL,并且-c是您希望网格使用的功能。

您可以在此处查看可用功能的完整列表。

[](#specify-the-number-of-parallel-processes)指定并行进程数

在网格上运行时,您可能需要控制正在运行的并行会话数。为此,您可以使用-w n命令标志(其中n是所需的进程数)。

selenium-side-runner -w 10 --server http://localhost:4444/wd/hub

运行程序将自动将工作程序数量设置为计算机上可用的CPU核心数量。在大多数情况下,这是最佳选择。

[](#chrome-specific-capabilities)Chrome特定功能

如果您将Chrome安装在计算机的非标准位置,则可以指定路径,以便ChromeDriver知道要查找的位置。

selenium-side-runner -c "goog:chromeOptions.binary='/path/to/non-standard/Chrome/install'"

使用特定于Chrome的功能,您还可以轻松运行测试。

selenium-side-runner -c "goog:chromeOptions.args=[disable-infobars, headless]"

[](#a-framework-at-your-fingertips)触手可及的框架

runner还提供其他一些便利。您期望在传统的测试自动化框架中可以使用的东西。

[](#change-the-base-url)更改基本URL

通过指定其他基本URL的能力,您可以轻松地将测试指向不同的环境(例如,本地开发,测试,登台,生产)。

selenium-side-runner --base-url https://localhost

[](#filter-tests)筛选测试

您还可以选择使用--filter target命令标志(其中target是正则表达式值)运行测试的目标子集。包含给定搜索条件的测试名称将是唯一运行的测试名称。

selenium-side-runner --filter smoke

[](#output-test-results-to-a-file)将测试结果输出到文件

如果需要将测试结果导出到文件中(例如,作为CI进程的一部分运行时),则可以使用--output-directory--output-format标志的组合。

--output-directory定义放置测试结果文件的位置。它可以采用绝对路径或相对路径。

--output-format定义用于测试结果文件的格式。它可以是jest(例如,JSON)或junit(例如,XML)。默认格式为jest(例如,如果您未指定类型)。

selenium-side-runner --output-directory=results
# Outputs results in `jest` frormat in `./results/projectName.json'


selenium-side-runner --output-directory=results --output-format=jest
# Outputs results in `jest` frormat in `./results/projectName.json'


selenium-side-runner --output-directory=results --output-format=junit
# Outputs results in `junit` frormat in `./results/projectName.xml'

[](#specify-a-default-configuration)指定默认配置

您不必记住所有需要的命令行参数(这些参数可能很笨拙),而是可以将运行时参数存储在配置文件中。

您可以使用两种配置文件。

[](#option-1)选项1

.side.yml在将要运行测试的目录中创建一个文件。跑步者将自动捡起它。这是文件内容的示例。

capabilities:
  browserName: "firefox"
baseUrl: "https://www.seleniumhq.org"
server: "http://localhost:4444/wd/hub"

如果要忽略文件并改用命令行参数,--no-sideyml请在运行时与其他命令一起使用。

[](#option-2)选项2

除了使用.side.yml文件之外,您还可以在YAML文件中使用您选择的名称和位置指定运行时参数,然后在运行测试时指定其位置。

selenium-side-runner --config-file "/path/to/your/config.yaml"

注意:使用--config-file标志时,.side.yml将被忽略。

[](#selenium-ide-configuration)Selenium IDE配置

[](#test-parallelization-in-a-suite)在套件中测试并行化

开箱即用,跑步者并行执行套件,但是套件中的测试是顺序执行的。

要在给定套件中并行运行测试,您需要在Selenium IDE中更新该套件的设置。

  1. 切换到Test SuitesSelenium IDE中的视图
  2. 点击您要配置的套件名称旁边的下拉菜单,然后点击 Settings
  3. 单击复选框 Run in parallel
  4. 请点击 Submit
  5. 保存您的Selenium IDE项目文件

要配置多个套件以这种方式运行,请在每个套件中重复步骤1-4。完成后,请确保保存项目文件。

[](#advanced-options)高级选项

[](#additional-params)其他参数

Selenium IDE的插件可以指定自己的唯一运行时参数。您可以通过--params标志使用它们。

此选项采用各种选项的字符串(类似于您指定功能的方式)。

[](#basic-usage)基本用法

您指定参数的名称及其值。最基本的方法是指定一个字符串值。

selenium-side-runner --params "a='example-value'"

[](#nested-parameters)嵌套参数

也可以使用点符号嵌套参数。

selenium-side-runner --params "a.b='another example-value'"

[](#array-values)数组值

除了字符串,还可以指定字母数字值的数组。

selenium-side-runner --params "a.b.c=[1,2,3]"

[](#multiple-parameters)多个参数

--params 只能被调用一次,但是您可以通过空格分隔来指定多个参数。

selenium-side-runner --params "a='example-value' a.b='another example-value' a.b.c=[1,2,3]"

[](#using-a-proxy-server)使用代理服务器

您可以使用运行程序中的以下选项将代理功能传递给浏览器。

[](#direct-proxy)直接代理

此选项将WebDriver配置为绕过所有浏览器代理。

[](#from-the-command-line)在命令行中:
> selenium-side-runner --proxy-type=direct

[](#in-sideyaml)在.side.yaml
proxyType: direct

[](#manual-proxy)手动代理

手动配置浏览器代理。

[](#from-the-command-line-1)在命令行中:
selenium-side-runner --proxy-type=manual --proxy-options="http=localhost:434 bypass=[http://localhost:434, http://localhost:8080]"

[](#in-sideyaml-1)在.side.yaml
proxyType: manual
proxyOptions:
  http: http://localhost:434
  https: http://localhost:434
  ftp: http://localhost:434
  bypass:
    - http://localhost:8080
    - http://host:434
    - http://somethingelse:32

[](#pac-proxy)PAC代理

配置WebDriver以使用给定URL处的PAC文件设置浏览器代理。

[](#from-the-command-line-2)在命令行中:
selenium-side-runner --proxy-type=pac --proxy-options="http://localhost/pac"

[](#in-sideyaml-2)在.side.yaml
proxyType: pac
proxyOptions: http://localhost/pac

[](#socks-proxy)SOCKS 代理

为SOCKS代理创建代理配置。

[](#from-the-command-line-3)在命令行中:
selenium-side-runner --proxy-type=socks --proxy-options="socksProxy=localhost:434 socksVersion=5"

[](#in-sideyaml-3)在.side.yaml
proxyType: socks
proxyOptions:
  socksProxy: localhost:434
  socksVersion: 5

[](#system-proxy)系统代理

配置WebDriver以使用当前系统的代理。

[](#from-the-command-line-4)在命令行中:
selenium-side-runner --proxy-type=system

[](#in-sideyaml-4)在.side.yaml
proxyType: system

[](#code-export)代码导出

如果您想学习如何将记录的测试转换为WebDriver代码,或者想要将记录的测试集成到现有的自定义测试框架中,则需要的是代码导出,现在可用于某些语言。您可以在此处了解更多信息

  1. Selenium IDE使用指南一(爬虫脚本录制器)
  2. Selenium IDE使用指南二(命令行运行器)
  3. Selenium IDE使用指南三(控制流)
  4. Selenium IDE使用指南四(代码导出)
  5. Selenium IDE使用指南五(常见问题)
  6. Selenium IDE使用指南六(指令列表)
  7. Selenium IDE使用指南七(参数定义)

作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.分布式编程

查看原文

赞 0 收藏 0 评论 0

分布式编程 发布了文章 · 5月25日

Selenium IDE使用指南一(爬虫脚本录制器)

[](#installation)安装

ChromeFirefox网络商店安装Selenium IDE 。

[](#launch-the-ide)启动IDE

安装后,通过从浏览器菜单栏中单击其图标来启动它。

[](#troubleshooting)故障排除

在菜单栏中没有看到Selenium IDE的图标?

[](#option-1)选项1

确保在浏览器的扩展程序设置中启用了IDE。

通过在地址栏中输入以下内容并点击,您可以快速到达目的地Enter

  • Chrome: chrome://extensions
  • Firefox: about:addons

[](#option-2)选项2

该扩展名可能已启用,但图标已隐藏。尝试调整菜单栏的大小,以提供更多空间。

在Chrome浏览器中,您可以通过以下方法执行此操作:单击地址栏的右侧,按住该单击,然后将其向左或向右拖动。

在Firefox中,您需要右键单击,单击Customize,对菜单栏进行调整,然后单击Done

[](#welcome-screen)欢迎屏幕

启动IDE后,将显示一个欢迎对话框。

这将使您快速访问以下选项:

  • 在新项目中记录新测试
  • 打开一个现有项目
  • 创建一个新项目
  • 关闭IDE

如果这是您第一次使用IDE(或者您正在启动新项目),请选择第一个选项。

[](#recording-your-first-test)记录您的第一个测试

创建新项目后,将提示您命名它,然后要求您提供基本URL。基本URL是您正在测试的应用程序的URL。只需设置一次,它就会在该项目的所有测试中使用。如果需要,您可以稍后更改。

完成这些设置后,将打开一个新的浏览器窗口,加载基本URL,并开始记录。

与页面进行交互,您的每个动作都将记录在IDE中。要停止录制,请切换到IDE窗口,然后单击录制图标。

[](#organizing-your-tests)整理测试

[](#tests)测验

您可以通过单击+左侧工具栏菜单顶部(Tests标题右侧)的符号,命名它,然后单击来添加新测试ADD

添加后,您可以手动输入命令,也可以单击IDE右上角的记录图标。

[](#suites)套房

可以将测试分组到套件中。

在创建项目时,Default Suite会创建一个,并且您的第一个测试会自动添加到其中。

要创建和管理套件,请转到Test suites面板。您可以通过单击左侧工具栏菜单顶部的下拉菜单(例如,单击单词Tests)并选择来到达那里Test suites

[](#add-a-suite)添加套房

要添加套件,请单击标题+右侧左侧栏菜单顶部的符号Test Suites,提供名称,然后单击ADD

[](#add-a-test)添加测试

要将测试添加到套件上,请将鼠标悬停在套件名称上,然后执行以下操作:

  1. 单击Test Suites标题右侧显示的图标
  2. 请点击 Add tests
  3. 从菜单中选择要添加的测试
  4. 请点击 Select

[](#remove-a-test)删除测试

要删除测试,请将鼠标悬停在该测试上,然后单击X名称右侧显示的。

[](#remove-or-rename-a-suite)删除或重命名套件

要删除套件,请单击其名称右侧出现的图标,单击Delete,然后Delete在出现提示时再次单击。

要在套件名称上重命名套件,请单击名称右侧出现的图标,单击Rename,更新名称,然后单击RENAME

[](#save-your-work)保存工作

要保存您刚刚在IDE中完成的所有操作,请单击IDE右上角的保存图标。

它将提示您输入保存项目的位置和名称。最终结果是带有.side扩展名的单个文件。

[](#playback)回放

[](#in-browser)浏览器内

您可以在IDE中播放测试,方法是选择要播放的测试或套件,然后单击测试编辑器上方菜单栏中的播放按钮。

测试将在浏览器中播放。如果仍在从录制中打开一个窗口,则将其用于播放。否则,将打开并使用一个新窗口。

[](#cross-browser)跨浏览器

如果要在其他浏览器上运行IDE测试,请确保安装命令行运行器。

  1. Selenium IDE使用指南一(爬虫脚本录制器)
  2. Selenium IDE使用指南二(命令行运行器)
  3. Selenium IDE使用指南三(控制流)
  4. Selenium IDE使用指南四(代码导出)
  5. Selenium IDE使用指南五(常见问题)
  6. Selenium IDE使用指南六(指令列表)
  7. Selenium IDE使用指南七(参数定义)

作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.分布式编程

查看原文

赞 0 收藏 0 评论 0

分布式编程 发布了文章 · 5月24日

美团点评技术年货2018,美团点评技术年货2019,覆盖前端、后台、大数据、算法……

今天给大家分享美团技术团队推出的技术年货
《美团点评2018年技术年货.pdf》
《美团点评2019年技术年货.pdf》
该“年货”精选美团技术团队技术干货以及数篇国际顶会论文,希望对您有用。
文末附电子书下载链接。

2018目录如下:

美团2018

2019目录如下:

美团2019

如何获取?

长按并识别文末的二维码,关注“分布式编程”公众号,回复 【电子书】,即可免费下载美团点评技术文章精选。

分布式编程
作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.分布式编程

查看原文

赞 0 收藏 0 评论 0

分布式编程 发布了文章 · 5月23日

[不得不知道系列]Java面试你不得不知道的基础知识一

当今世界上使用最广泛的编程语言之一是Java。Java是通用的高级编程语言。核心java是java编程技术概念的基础,该术语由sun Microsystems用来描述Java的标准版本(JSE)。核心Java只是Java的一部分,它代表J2SE,其中包含Java的所有基础知识,包括一些原理和软件包详细信息。Java核心概念涵盖了所有OOPS概念,特殊运算符,数据类型,包装类,异常处理,多态性,多线程,链接列表,队列,堆栈,数组列表。它最常用于开发桌面应用程序和服务器环境(开发独立应用程序)。

JDK和JVM有什么区别?

JDK(Java开发工具包)是一个开发目的,它还包括执行环境。但是JVM纯粹是运行时环境,因此您将无法使用JVM编译源文件。

OOPS的基本概念是什么?

抽象化

多态性

继承

封装

你能解释多态吗?

多态被简要描述为“一个接口,许多实现”。多态性是能够在不同上下文中为某事物赋予不同含义或用法的一种特征-具体来说,就是允许诸如变量,函数或对象之类的实体具有多种形式。

内部类和子类之间有什么区别?

内部类是嵌套在另一个类中的一个类。内部类具有对其嵌套的类的访问权限,并且可以访问在外部类中定义的所有变量和方法。

子类是从另一个称为超类的类继承的类。子类可以访问其父类的所有公共和受保护的方法以及字段。

Java类的private,public是什么?

在Java中,访问说明符是在定义访问范围的类名之前使用的关键字。类的访问说明符的类型为:

  • public:类,方法,字段可从任何地方访问。
  • Protected::方法,字段可以从它们所属的同一类或子类以及同一包的类中访问,但不能从外部访问。
  • default: Method,Field,class只能从同一程序包访问,而不能从其本机程序包外部访问。
  • private:方法,字段可以从它们所属的相同类中访问。
您能解释一下静态方法和静态变量吗?

当需要在一个类的多个对象之间共享方法或变量,而不是为每个对象创建单独的副本时,我们使用static关键字使所有对象共享一个方法或变量。

Java支持运算符重载吗?

没有

可以重载方法吗?

是的,派生类仍然可以覆盖重载的方法。多态仍然可能发生。编译器将不会绑定方法调用,因为它已被重载,因为它可能会在现在或将来被覆盖。

什么是数据封装,其意义是什么?

封装是面向对象编程中的一个概念,用于在单个单元中组合属性和方法。

封装可帮助程序员遵循模块化的方法进行软件开发,因为每个对象都有自己的一组方法和变量,并且其功能独立于其他对象。封装还用于数据隐藏。

什么是单例模式?举例说明其用法

Java中的单例类只能有一个实例,因此其所有方法和变量都只属于一个实例。单例类概念对于需要限制一个类的对象数量的情况很有用。

单例使用情况的最佳示例是,由于某些驱动程序限制或任何许可问题,只有一个数据库连接存在限制。

什么是守护线程?

它是一个线程,不会阻止JVM在程序完成但该线程仍在运行时退出。守护程序线程的一个示例是垃圾回收。

Java中的循环是什么?三种循环类型是什么?

循环在编程中用于重复执行一条语句或语句块。Java中有三种循环类型:

for

在Java中,for循环用于重复执行给定次数的语句。当程序员知道执行语句的次数时,将使用for循环。

While循环

当某些语句需要重复执行直到满足条件时,使用while循环。在while循环中,在执行语句之前先检查条件。

do While

Do While循环与while循环相同,只是执行语句块后检查条件的不同。因此,在do while循环的情况下,语句至少执行一次。

您可以定义死锁吗?

死锁描述了一种情况,其中两个或多个线程永远被阻塞,互相等待。

什么是无限循环?如何声明无限循环?

无限循环无条件运行,并且无限运行。通过在语句块的主体中​​定义任何中断逻辑,可以中断无限循环。

无限循环声明如下:

for(;;)

{

//要执行的语句

//添加任何循环中断逻辑

}

Continue和break语句有什么区别?

中断和继续是循环中使用的两个重要关键字。在循环中使用break关键字时,循环会立即中断,而在使用continue关键字时,当前迭代会中断,并且循环会继续进行下一次迭代。

在下面的示例中,当计数器达到4时,循环中断。

for (counter=0;counter
  System.out.println(counter);
  If (counter==4) {
    Break;
  }
}

在下面的示例中,当计数器达到4时,循环会跳至tonext迭代,而continue关键字之后的所有语句都将跳过当前迭代。

for (counter=0;counter
  System.out.println(counter);
  If (counter==4) {
    continue;
  }
  System.outprintln(“This will not get printed when counter is 4”);
}
Java中的double和float变量有什么区别?

在Java中,float占用4个字节的内存,而Double占用8个字节的内存。浮点数是单精度浮点十进制数,而双精度数是双精度十进制数。

什么是javac?

javac从* .java文件生成Java字节码。它是您的源代码的中间表示,其中包含指示

Java中的最终关键字是什么?举个例子

在Java中,使用关键字Final声明一个常量。值只能分配一次,分配后不能更改常量的值。

在下面的示例中,声明了名称为const_val的常量,并为其分配了一个值:

private Final int const_val=100

当一个方法声明为final方法时,它不能被子类覆盖。此方法比任何其他方法都快,因为它们在编译时已解决。

当一个类声明为final时,则不能将其子类化。示例String,Integer和其他包装器类。

什么是三元运算符?

三元运算符(也称为条件运算符)用于根据布尔值评估来决定将哪个值分配给变量。表示为?

在下面的示例中,如果等级为1,则为状态分配值“Done”,否则为“Pending”。


public class conditionTest {

    public static void main(string args[]) {
    
        String status;
        
        int rank;
        
        status= (rank == 1) ? “Done”: “Pending”;
    
    }

}
Java中有6种不同类型的运算符?

在Java中,运算符可以分为以下六种类型:

算术运算符

用于算术计算。例如+,-,*,/,%,++,–

关系运算符

用于关系比较。例如==,!=,>,<,<=,> =

按位运算符

用于逐位操作。例如&,|,^,〜

逻辑运算符

用于逻辑比较。例如&&,|| ,!

赋值运算符

用于为变量分配值。例如=,+ =,-=,* =,/ =

Java派生所有类的基类是什么?

java.lang.object

Java中的main()方法可以返回任何数据吗?

在Java中,main()方法无法返回任何数据,因此,始终使用无效的返回类型进行声明。

什么是Java包?包装的意义是什么?

在Java中,包是类和接口的集合,这些类和接口相互关联在一起,因此捆绑在一起。软件包的使用有助于开发人员对代码进行模块化,并对代码进行分组以进行适当的重用。将代码打包到Packages中之后,就可以将其导入其他类中并使用了。

我们可以在没有任何抽象方法的情况下将类声明为Abstract吗?

是的,即使没有任何抽象方法,我们也可以在类名之前使用abstract关键字来创建一个抽象类。但是,如果一个类甚至具有一个抽象方法,则必须将其声明为抽象方法,否则将产生错误。

堆内存和堆栈内存有什么区别?

堆内存由应用程序的所有部分使用。每当创建对象时,它始终存储在堆空间中,并且堆栈存储器包含对该对象的引用。内存管理在Heap内存中更为复杂,因为它在全局范围内使用。

堆栈存储器仅由一个执行线程使用。堆栈内存仅包含局部原始变量和堆空间中对象的引用变量。堆栈中的内存管理以LIFO方式完成

Java中的抽象类和接口有什么区别?

抽象类和接口之间的主要区别在于,接口只能拥有没有具体实现的公共静态方法的声明,而抽象类可以具有带有或不带有具体实现的带有任何访问说明符(公共,私有等)的成员。

使用抽象类和接口的另一个主要区别是,实现接口的类必须实现接口的所有方法,而从抽象类继承的类则不需要实现其超类的所有方法。

一个类可以实现多个接口,但只能扩展一个抽象类。

接口对抽象类的性能影响是什么?

与抽象类相比,接口的性能较慢,因为接口需要额外的间接调用。开发人员要考虑的另一个关键因素是,任何类只能扩展一个抽象类,而一个类可以实现许多接口。

每当在类中实现接口时,使用接口也给开发人员带来了额外的负担;开发人员被迫实现每种接口方法。

导入软件包是否也可以在Java中导入其子软件包?

在Java中,当导入包时,不会导入其子包,并且如果需要,开发人员需要分别导入它们。

例如,如果开发人员导入了一个软件包university。*,则将装入名为university的软件包中的所有类,但不会装入该子软件包中的任何类。

我们可以将类的主要方法声明为私有方法吗?

在Java中,main方法必须是public static以便正确运行任何应用程序。如果将main方法声明为私有方法,则开发人员将不会获得任何编译错误,它将无法执行,并会给出运行时错误。

我们如何通过引用将参数传递给函数,而不是通过值传递?

在Java中,我们只能通过值而不是通过引用将参数传递给函数。

如何在Java中序列化对象?

在Java中,要通过序列化将对象转换为字节流,该类将实现一个名为Serializable的接口。实现可序列化接口的类的所有对象均被序列化,其状态保存在字节流中。

什么时候应该使用序列化?

当需要通过网络传输数据时,使用串行化。使用序列化,可以保存对象的状态并将其转换为字节流。字节流通过网络传输,并且在目标位置重新创建对象。

在Java中,在try块后面紧跟一个catch块是否强制进行异常处理?

尝试阻止之后,需要紧接着是Catch阻止,finally阻止或二者兼有。从try块引发的任何异常都需要捕获在catch块中,或者必须在代码中止之前将要执行的任何特定任务放入Final块中。

即使在异常块中发生某些异常,是否有任何方法可以跳过最终的异常块?

如果在Try块中引发异常,则控制传递到catch块(如果存在),否则传递到finally块。当发生异常时,总是执行finally块,避免在finally块中执行任何语句的唯一方法是通过在try块的末尾编写以下代码行来强行中止代码:

System.exit(0);

一个类可以有多个构造函数吗?

是的,一个类可以具有多个带有不同参数的构造函数。用于创建对象的构造函数取决于创建对象时传递的参数。

super关键字有什么作用?

当您在子类中重写方法时,可以使用super关键字来访问该方法。

我们可以重写类的静态方法吗?

我们不能覆盖静态方法。静态方法属于一个类,而不属于单个对象,并且在编译时(而不是在运行时)解析。即使我们尝试覆盖静态方法,也不会遇到编译错误,也不会在运行代码时产生覆盖的影响。

public class superclass {
    public void displayResult() {
        System.out.println(“Printing from superclass”);
    }
}

public class subclass extends superclass {

    public void displayResult() {
    
        System.out.println(“Displaying from subClass”);
        
        super.displayResult();
        
    }
    
    public static void main(String args[]) {
    
        subclass obj=new subclass();
        
        obj.displayResult();
    
    }

}

Output will be:

Displaying from subclass

Displaying from superclass
字符串是Java中的数据类型吗?

字符串不是Java中的原始数据类型。在Java中创建字符串时,它实际上是创建的Java.Lang.String类的对象。创建此字符串对象后,可以在该字符串对象上使用String类的所有内置方法。

  1. Java内存管理面试指南一
  2. Java基础面试指南一
  3. Java基础面试指南二
  4. Java基础面试指南三
  5. Java基础面试指南四
  6. Java线程面试指南一
  7. Java线程面试指南二
  8. Redis面试指南一
  9. Kafka面试指南一
  10. Spring面试指南一
  11. SpringBoot面试指南一
  12. 微服务面试指南一

作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.分布式编程

查看原文

赞 0 收藏 0 评论 0

分布式编程 发布了文章 · 5月22日

(Python基础教程之二十二)爬虫下载网页视频(video blob)

现在视频链接一般为m3u8,找到m3u8地址就可以下载了

  1. 打开Chrome Developer工具,然后点击“网络”标签。
  2. 导航到包含视频的页面,然后开始播放。
  3. 将文件列表过滤为“ m3u8”。
  4. 找到master.m3u8或index.m3u8并单击它。
  5. 将文件保存到磁盘并在其中查看。
  6. 如果文件包含一个m3u8主URL,则复制该URL。
  7. 使用ffmpeg 工具下载m3u8视频
ffmpeg -i "https://secure.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=6138283938001&secure=true&videoId=6138277786001" -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 6138277786001.mp4

Python下载代码

#!/usr/bin/env python3
import requests,urllib
from bs4 import BeautifulSoup
import os
import subprocess

pwd = os.path.split(os.path.realpath(__file__))[0]

url = "https://www.topgear.com/videos"

headers = {
    'upgrade-insecure-requests': "1",
    'user-agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
    'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    'accept-encoding': "gzip, deflate, br",
    'accept-language': "zh-CN,zh;q=0.9,en;q=0.8",
    'cookie': "has_js=1; minVersion={\"experiment\":1570672462,\"minFlavor\":\"new_vermi-1.13.7.11.js100\"}; minUniq=%7B%22minUID%22%3A%22bb80328a30-e8cdeb4d55-9a314411d2-aff4bb11a6-4aa23e3779%22%7D; minDaily=%7B%22testMode%22%3Atrue%2C%22dailyUser%22%3Atrue%7D; __gads=ID=b6eee23a8df86f72:T=1588041695:S=ALNI_MYCQR1Bf2fq53bqISIZBy8kIgI9oA; minBuffer=%7B%22minAnalytics%22%3A%22%7B%5C%22clicks%5C%22%3A%5B%5D%2C%5C%22clicksDelay%5C%22%3A%5B%5D%7D%22%2C%22_minEE1%22%3A%22%5B%5D%22%7D; minSession=%7B%22minSID%22%3A%227f32fd50ab-88cc4cf6f3-68d284cdee-1faeb65c08-c5966d76ac%22%2C%22minSessionSent%22%3Atrue%2C%22hadImp%22%3Atrue%2C%22sessionUniqs%22%3A%22%7Btime%3A1588053248571%2Clist%3A%5B11206251nt0%5D%7D%22%7D; OptanonConsent=landingPath=NotLandingPage&datestamp=Tue+Apr+28+2020+13%3A55%3A33+GMT%2B0800+(%E4%B8%AD%E5%9B%BD%E6%A0%87%E5%87%86%E6%97%B6%E9%97%B4)&version=3.6.24&AwaitingReconsent=false&groups=1%3A1%2C101%3A0%2C2%3A0%2C0_132429%3A0%2C3%3A0%2C4%3A0%2C0_132431%3A0%2C104%3A0%2C106%3A0%2C111%3A0%2C114%3A0%2C120%3A0%2C124%3A0%2C126%3A0%2C130%3A0%2C133%3A0%2C134%3A0%2C144%3A0%2C145%3A0%2C146%3A0%2C147%3A0%2C150%3A0%2C151%3A0%2C157%3A0%2C162%3A0%2C173%3A0%2C0_126679%3A0%2C0_137695%3A0%2C0_132361%3A0%2C0_132391%3A0; GED_PLAYLIST_ACTIVITY=W3sidSI6Ijh5clQiLCJ0c2wiOjE1ODgwNTMzNDksIm52IjowLCJ1cHQiOjE1ODgwNTMzMzMsImx0IjoxNTg4MDUzMzM3fV0.",
    'cache-control': "no-cache"}

if __name__ == '__main__':
    response = requests.request("GET", url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    videoId = soup.find_all('video', class_="video-js")[0]['data-video-id'] ##获取视频Id
    title = soup.find_all('h1', class_="video-player__title")[0].contents[0] ##获取视频标题
    url = "https://secure.brightcove.com/services/mobile/streaming/index/master.m3u8?videoId={}&secure=true".format(videoId)  ##生成视频下载Url
    filename = '{}.mp4'.format(title).replace(" ","-")
    cmd_str = 'ffmpeg -i \"' + url + '\" ' + '-acodec copy -vcodec copy -absf aac_adtstoasc ' + pwd + "/" +filename  ##下载视频
    print(cmd_str)
    subprocess.call(cmd_str,shell=True)
  1. Python基础教程
  2. 在SublimeEditor中配置Python环境
  3. Python代码中添加注释
  4. Python中的变量的使用
  5. Python中的数据类型
  6. Python中的关键字
  7. Python字符串操作
  8. Python中的list操作
  9. Python中的Tuple操作
  10. Pythonmax()和min()–在列表或数组中查找最大值和最小值
  11. Python找到最大的N个(前N个)或最小的N个项目
  12. Python读写CSV文件
  13. Python中使用httplib2–HTTPGET和POST示例
  14. Python将tuple开箱为变量或参数
  15. Python开箱Tuple–太多值无法解压
  16. Pythonmultidict示例–将单个键映射到字典中的多个值
  17. PythonOrderedDict–有序字典
  18. Python字典交集–比较两个字典
  19. Python优先级队列示例
  20. python中如何格式化日期
  21. 30 分钟 Python 爬虫教程
  22. 爬虫下载网页视频(video blob)

作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.分布式编程

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 4 次点赞
  • 获得 1 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 1 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 4月27日
个人主页被 89 人浏览