• selenium元素定位方法


    Selenium提供了8种定位方式。

    id

    name

    class name

    tag name

    link text

    partial link text

    xpath

    css selector

    8种定位方式在Python selenium中所对应的方法为:

    find_element_by_id()

    find_element_by_name()

    find_element_by_class_name()

    find_element_by_tag_name()

    find_element_by_link_text()

    find_element_by_partial_link_text()

    find_element_by_xpath()

    find_element_by_css_selector()

    控制浏览器窗口大小

    driver.set_window_size(480,800)

    控制浏览器后退、前进

     

    刷新页面

    driver.refresh() #刷新当前页面

    点击和输入

    clear(): 清除文本。

    send_keys (value): 模拟按键输入。

    click(): 单击元素。

     

    提交

    submit()

    submit()方法用于提交表单。 例如, 在搜索框输入关键字之后的“回车” 操作, 就可以通过该方法模拟。

     

    其他常用方法

    size: 返回元素的尺寸。

    text: 获取元素的文本。

    get_attribute(name): 获得属性值。

    is_displayed(): 设置该元素是否用户可见。

     

    输出结果:

     

    执行上面的程序并查看结果: size 方法用于获取百度输入框的宽、 高, text 方法用于获得百度底部的备案信息, get_attribute()用于获得百度输入的 type 属性的值, is_displayed()用于返回一个元素是否可见, 如果可见则返回 True, 否则返回 False。

    鼠标事件

    WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。

    ActionChains 类提供了鼠标操作的常用方法:

    perform(): 执行所有 ActionChains 中存储的行为;

    context_click(): 右击;

    double_click(): 双击;

    drag_and_drop(): 拖动;

    move_to_element(): 鼠标悬停。

     

    from selenium.webdriver import ActionChains

    导入提供鼠标操作的 ActionChains 类。

    ActionChains(driver)

    调用 ActionChains()类, 将浏览器驱动 driver 作为参数传入。

    move_to_element(above)

    context_click()方法用于模拟鼠标右键操作, 在调用时需要指定元素定位。

    perform()

    执行所有 ActionChains 中存储的行为, 可以理解成是对整个操作的提交动作。

    键盘事件

    Keys()类提供了键盘上几乎所有按键的方法。 前面了解到, send_keys()方法可以用来模拟键盘输入, 除此 之外, 我们还可以用它来输入键盘上的按键, 甚至是组合键, 如 Ctrl+A、 Ctrl+C 等。

     

    需要说明的是, 上面的脚本没有什么实际意义, 仅向我们展示模拟键盘各种按键与组合键的用法。

    • from selenium.webdriver.common.keys import Keys

    在使用键盘按键方法前需要先导入 keys 类。

    send_keys(Keys.BACK_SPACE) 删除键(BackSpace)

    send_keys(Keys.SPACE) 空格键(Space)

    send_keys(Keys.TAB) 制表键(Tab)

    send_keys(Keys.ESCAPE) 回退键(Esc)

    send_keys(Keys.ENTER) 回车键(Enter)

    send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)

    send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)

    send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)

    send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)

    send_keys(Keys.F1) 键盘 F1

    ……

    send_keys(Keys.F12) 键盘 F12

    获取断言信息

    不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言

    我们通常可以通过获取title 、URL和text等信息进行断言。text方法在前面已经讲过,它用于获取标签对之间的文本信息。 下面同样以百度为例,介绍如何获取这些信息。

     

    脚本运行结果如下:

     

    • title:用于获得当前页面的标题。
    • current_url:用户获得当前页面的URL。
    • text:获取搜索条目的文本信息。

    设置元素等待

    WebDriver提供了两种类型的等待:显式等待隐式等待

    显式等待

    显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)。

     

    WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:

    WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

    • driver :浏览器驱动。
    • timeout :最长超时时间,默认以秒为单位。
    • poll_frequency :检测的间隔(步长)时间,默认为0.5S。
    • ignored_exceptions :超时后的异常信息,默认情况下抛    NoSuchElementException异常。

    WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。 * until(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为True。 * until_not(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为False。

    在本例中,通过as关键字将expected_conditions 重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。

    隐式等待

    WebDriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0。它的用法相对来说要简单得多。

     

    implicitly_wait()默认参数的单位为秒,本例中设置等待时长为10秒。首先这10秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没有定位到元素,则抛出异常。

    定位一组元素

    WebDriver还提供了8种用于定位一组元素的方法。

     

    定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数。

    接下来通过例子演示定位一组元素的使用:

     

    程序运行结果:

     

    多表单切换

    Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

     

    126邮箱登录框的结构大概是这样子的,想要操作登录框必须要先切换到iframe表单。

     

    switch_to.frame() 默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。

     

    除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳回最外层的页面。

    多窗口切换

    在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换。 以百度首页和百度注册页为例,在两个窗口之间的切换.

     

    在本例中所涉及的新方法如下:

    • current_window_handle:获得当前窗口句柄。
    • window_handles:返回所有窗口的句柄到当前会话。
    • switch_to.window():用于切换到相应的窗口,与上一节的switch_to.frame()类似,前者用于不同窗口的切换,后者用于不同表单之间的切换。

    警告框处理

    WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作。

    text:返回 alert/confirm/prompt 中的文字信息。

    accept():接受现有警告框。

    dismiss():解散现有警告框。

    send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。

     

    通过switch_to_alert()方法获取当前页面上的警告框,并使用accept()方法接受警告框。

    下拉框选择

    有时我们会碰到下拉框,WebDriver提供了Select类来处理下拉框。

     

    Select类用于定位select标签。 select_by_value() 方法用于定位下接选项中的value值。

    文件上传

    对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过send_keys()指定本地文件路径的方式实现文件上传。

    创建upfile.html文件,代码如下:

     

    通过浏览器打开upfile.html文件,功能如下图。

     

    接下来通过send_keys()方法来实现文件上传。

     

    cookie操作

    有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试进行的。WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。

    WebDriver操作cookie的方法:

    get_cookies(): 获得所有cookie信息。

    get_cookie(name): 返回字典的key为“name”的cookie信息。

    add_cookie(cookie_dict) : 添加cookie。“cookie_dict”指字典对象,必须有name 和value 值。

    delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”。

    delete_all_cookies(): 删除所有cookie信息。

    下面通过get_cookies()来获取当前浏览器的cookie信息。

     

    从执行结果可以看出,cookie数据是以字典的形式进行存放的。知道了cookie的存放形式,接下来我们就可以按照这种形式向浏览器中写入cookie信息。

     

    从执行结果可以看到,最后一条cookie信息是在脚本执行过程中通过add_cookie()方法添加的。通过遍历得到所有的cookie信息,从而找到key为“name”和“value”的特定cookie的value。

    调用JavaScript代码

    虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法。在这种情况下,就可以借助JavaScript来控制浏览器的滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码。

    用于调整浏览器滚动条位置的JavaScript代码如下:

     

    window.scrollTo()方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距。其代码如下:

     

    通过浏览器打开百度进行搜索,并且提前通过set_window_size()方法将浏览器窗口设置为固定宽高显示,目的是让窗口出现水平和垂直滚动条。然后通过execute_script()方法执行JavaScripts代码来移动滚动条的位置。

    窗口截图

    自动化用例是由程序去执行的,因此有时候打印的错误信息并不十分明确。如果在脚本执行出错的时候能对当前窗口截图保存,那么通过图片就可以非常直观地看出出错的原因。WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口。

     

    脚本运行完成后打开D盘,就可以找到baidu_img.jpg图片文件了。

    关闭浏览器

    在前面的例子中我们一直使用quit()方法,其含义为退出相关的驱动程序和关闭所有窗口。除此之外,WebDriver还提供了close()方法,用来关闭当前窗口。例多窗口的处理,在用例执行的过程中打开了多个窗口,我们想要关闭其中的某个窗口,这时就要用到close()方法进行关闭了。

    close() 关闭单个窗口

    quit() 关闭所有窗口

     

  • 相关阅读:
    思念
    空白
    curl json string with variable All In One
    virtual scroll list All In One
    corejs & RegExp error All In One
    socket.io All In One
    vue camelCase vs PascalCase vs kebabcase All In One
    element ui 表单校验,非必填字段校验 All In One
    github 定时任务 UTC 时间不准确 bug All In One
    input range & color picker All In One
  • 原文地址:https://www.cnblogs.com/renshengruxi/p/11124604.html
Copyright © 2020-2023  润新知