当前位置: 首页 > news >正文

Selenium特殊场景问题汇总

1、Select下拉框选择、非Select下拉框选择、Input型的下拉框

1.1 Select下拉框选择

假设在本地电脑桌面有如下的HTML:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>跳转网址</title>
    <script type="text/javascript">
        function TxtToChange() {
            var url = document.getElementById("_url").value;
            switch (url) {
                case "https://www.baidu.com/":
                    document.getElementById("txt").value = url;
                    break;
                case "http://www.taobao.com/":
                    document.getElementById("txt").value = url;
                    break;
                case "https://www.jd.com/":
                    document.getElementById("txt").value = url;
                    break;
            }
        }

        function GoToUrl(){
            location = document.getElementById("txt").value;
        }
    </script>
</head>

<body>
    <form>
        <select id="_url" onchange="TxtToChange()">
            <option selected="selected">请选择</option>
            <option value="https://www.baidu.com/">百度</option>
            <option value="http://www.taobao.com/">淘宝</option>
            <option value="https://www.jd.com/">京东</option>
        </select>

        <input type="text" id="txt" />
        <input type="button" value="跳转" onclick="GoToUrl()">
    </form>
</body>

</html>

 我们想分别选择百度、淘宝、京东网站,可以通过Select的三种方式来获取

 特别注意:Select只对有<select>标签的下拉框菜单才有效

代码如下:

# -*- coding: utf-8 -*-

"""
@date:  2022/09/05 22:20
@author: Anker
@python:v3.10
"""

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select


browser = webdriver.Chrome()
browser.get('file:/C:/Users/Administrator/Desktop/test.html')
time.sleep(1)
#首先找到下拉列表,然后通过索引定位百度网站
Select(browser.find_element(By.ID, 'website_url')).select_by_index(1)
time.sleep(1)
#通过value值定位淘宝网站
Select(browser.find_element(By.ID, 'website_url')).select_by_value('http://www.taobao.com/')
time.sleep(1)
#通过选项文字定位京东网站
Select(browser.find_element(By.ID, 'website_url')).select_by_visible_text('京东')
time.sleep(2)
browser.close()

1.2 非Select下拉框选择

非Select下拉框的界面以及元素属性如下:

 思路分析:

我们在定位非<Select>标签的下拉框菜单中的选项,需要两个步骤:第一,先定位到选择下拉框的属性,第二,再对其中的选项进行定位。

代码如下:

# -*- coding: utf-8 -*-

"""
@date:  2022/09/05 22:35
@author: Anker
@python:v3.10
"""

import time
from selenium import webdriver
from selenium.webdriver.common.by import By


browser = webdriver.Chrome()
browser.get('http://pmp-qa.hongshan.cn:82/')
time.sleep(1)
# 选择数据类型
time.sleep(1)
# 第一步先定位到选择下拉框的属性
browser.find_element(By.ID, 'form_item_dataType').click()
time.sleep(1)
# 第二步再对其中的选项进行定位
browser.find_element(By.XPATH, '//*/span[@class="qk-select-selection-item"][text()="String"]').click()

1.3 Input型的下拉框

Input型下拉框的界面以及元素属性如下:

 思路分析:

第一步,先获取Input型下拉框;
第二步,向Input型下拉框输入内容;
第三步,按回车键;
第四步,点击空白区域

代码如下:

# -*- coding: utf-8 -*-

"""
@date:  2022/09/05 22:50
@author: Anker
@python:v3.10
"""

import time
from selenium import webdriver
from selenium.webdriver import Keys, ActionChains
from selenium.webdriver.common.by import By


browser = webdriver.Chrome()
browser.get('http://pmp-qa.hongshan.cn:82/')
time.sleep(1)

"""
零件状态查询
"""
# 第一步,先获取Input型下拉框(点击”零件状态“下拉框)
browser.find_element(By.XPATH, '//*[@id="filter_id_kye19uvq_1m82mvae"]/dd/div/div[1]/div').click()
time.sleep(1)
# 第二步,向Input型下拉框输入内容(查询零件状态为:In Work)
browser.find_elements(By.XPATH, '//*[@id="rc_select_2"]')[0].send_keys("In Work")
time.sleep(1)
# 第三步,按回车键
browser.find_element(By.XPATH, '//*[@id="rc_select_2"]').send_keys(Keys.ENTER)
time.sleep(1)
# 第四步,点击空白区域
ActionChains(browser).move_by_offset(0, 0).click().perform()  # 点击空白区域

2、Selenium解决内嵌向右滑动滚动条的方案 

 2.1 问题背景

现在很多web项目的前端页面会存在多个内嵌滚动条,我们在做UI自动化测试的时候,selenium一直找不到被挡住的元素,只有先把滚动条拖到对应元素显示区域内才可以定位到元素,这个时候我们用传统的js获取方式已无法获取了

 document.getElementById('id').scrollTop=10000

2.2 问题现象

我们常见的有竖向的内嵌上下滚动条和横向的内嵌左右滚动条,比如下图所示,页面的左右两列均固定住,只有通过拖动滚动条才能定位到自己想要的元素(比如:”外部零件号“这个字段)

2.3 解决方案 

(1)打开F12,点击Elements,将鼠标光标定位到内嵌的滚动条上,我们会看到这个滚动条对应的div的class

 (2)直接运用document.querySelector这个js的属性来获取即可,如下所示;

driver.execute_script("document.querySelector('.vxe-table--body-wrapper').scrollTo(5000,0)")

特别说明,其中:

.vxe-table--body-wrapper前面的点是为了模糊匹配div中的class属性,另外scrollTo(5000,0)中的5000表示向右移动5000个像素,竖向不移动

(3)如果页面的列被鼠标移动到右边了,此时我们想回到最初的位置,即输入如下命令即可:

driver.execute_script("document.querySelector('.vxe-table--body-wrapper').scrollTo(0,0)")

相关文章:

  • C++数据结构课程设计
  • R语言:岭回归分析选择变量
  • 波场合约交易记录查询易语言代码
  • 开发工程师必备————【Day26】Django补充(三)
  • 秒杀系统(1)——秒杀功能设计理念
  • [数据结构]~栈和队列(0-1)
  • 猿创征文|十 BLE协议之L2CAP
  • tomcat的初期了解
  • 羊城杯2022 部分web
  • 音视频图像篇 YUV-RGB
  • 【Python 实战基础】Pandas如何从字符串中解析某一数据,并统计多于一次的该数据
  • Bus:消息总线
  • SpringBoot - 用maven-dependency-plugin插件将项目代码与依赖分开打包
  • 一文学会如何使用适配器模式
  • 计算机网络原理 谢希仁(第8版)第四章习题答案
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【附node操作实例】redis简明入门系列—字符串类型
  • echarts花样作死的坑
  • Leetcode 27 Remove Element
  • Mysql优化
  • PHP 的 SAPI 是个什么东西
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SpringBoot几种定时任务的实现方式
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 聊聊flink的TableFactory
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 三栏布局总结
  • 网络应用优化——时延与带宽
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • ###项目技术发展史
  • #1014 : Trie树
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (八)c52学习之旅-中断实验
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (五)MySQL的备份及恢复
  • .apk 成为历史!
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net IOC框架入门之一 Unity
  • .net 按比例显示图片的缩略图
  • :O)修改linux硬件时间
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Conditional注解详解
  • @JoinTable会自动删除关联表的数据
  • @RequestMapping-占位符映射
  • @Service注解让spring找到你的Service bean
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [C#]C#学习笔记-CIL和动态程序集