用元素源代码区分元素类型和状态

问题描述

如何确定元素的类型,比如:输入框 or 复选框 or 下拉框?

解决方法

第一步 区分元素标签

输入框 or 复选框:INPUT

下拉框:SELECT

用在元素上执行 JavaScript 的方式来获取:

第二步 区分元素类型

输入框:type:text

复选框:type:checkbox

用获取网页元素属性来实现

其他方法:

实际上,直接获取网页元素源代码,标签和类型都在其中,也可以以此为依据进行判断。


问题引入:

有些看着像复选框而不是复选框,无法用设置复选框指令,但是需要判断此时是否处于被选中状态,该怎么办?

① 标准的复选框(checkbox)和单选按钮(radio button):

用影刀捕获后,在这个元素的元素编辑界面,最后一级的 type 应为 radiocheckbox

解决办法:在这个网页元素上执行 JavaScript:

function (element, input) {
    return element.checked;
}

通过判断这个脚本的执行结果,判断这个单选按钮或复选框是否已经选中。True 为已经选中,False 为没有选中。

执行 JS 脚本指令配置:

流程执行逻辑:在 Chrome 浏览器中获取已打开的网页对象,保存在 web_page 中 -> 在 web_page 的“单选按钮 _radio-input”元素上执行上述 JavaScript 脚本,执行结果保存在 web_js_result 中 -> 打印 web_js_result。

执行结果:

该按钮已经选中。

注:不是只有 radio button 或 checkbox 才能用这个方法判断状态,遇到实际场景时建议尝试一下。

② 非标准复选框或单选按钮

按 F12 打开浏览器开发者工具,通过观察元素源代码可以知道,选中“赠送运费险”时,包含复选框的父元素会有 data-action 属性,不选中时则没有。

选中时:

<a class="filter icon-tag J_Ajax icon-hover" trace="filterbox" trace-filterid="filterYunFeiXian" href="#" data-url="filter" data-key="auction_tag[]" data-value="385" data-action="remove" uia-uid="0|12">
          <span class="icon icon-btn-check-big"></span>

            <span class="text ">赠送退货运费险</span>

        </a>

未选中时:

<a class="filter icon-tag J_Ajax " trace="filterbox" trace-filterid="filterYunFeiXian" href="#" data-url="filter" data-key="auction_tag[]" data-value="385" uia-uid="0|11">
          <span class="icon icon-btn-check-big"></span>

            <span class="text ">赠送退货运费险</span>

        </a>

于是捕获复选框元素的父元素:

判断逻辑:

流程执行逻辑:

获取已打开的网页,保存到 web_page -> 获取上面捕获的元素的源码 -> 如果源代码包含 data-action,打印 “已选中”,否则打印 “未选中”

伪元素的情况

出现的场景:网页中,复选框无论是勾选还是取消勾选状态,元素源码的属性都不会发生变化,只会新增一个伪类元素。例如:"::before"、"::after",这种情况下无法通过影刀的“设置复选框”的指令来进行操作的,获取元素源代码的方式也无法获取到伪类元素:

例子:

解决方案: 捕获这个元素,执行以下 JavaScript 代码:

function (element, input) {
    return window.getComputedStyle(element,"::before").content;
}

本例中勾选时打印的内容是"",不勾选时打印的内容是none。根据内容做判断即可。

问题没有解决?去社区提问 all right reserved,powered by Gitbook

results matching ""

    No results matching ""