appium+python自动化98-非select弹出选择框定位解决

前言

遇到问题:document.getElementsByClassName(...)[0] is undefined
选择框如果是select标签的,可以直接用select专用的方法去定位点击操作。其它不是select选择框的时候,那就按正常操作步骤先点输入框,再点选项就行了。
可是有些选择框就是不听话,你会发现用selenium死活定位不到,这个时候只能用万能的js来解决了。

input选择框

1.先看下弹出框的常见,如下这种

2.查看元素属性,是input标签,并且是readonly属性,说明不能被输入

js调试

1.首先尝试了selenium的定位方法,发现点输入框是可以弹出选项的,只是点选项死活点不了。于是在浏览器用js去调试

先点输入框,让它弹出选项

元素属性
<input class="el-input__inner" type="text" autocomplete="off" placeholder="请选择" readonly="readonly">

document.getElementsByClassName(‘el-input__inner‘)[2].click();

2.等选项弹出来了,再次在浏览器输入js去点选项

元素属性
<ul class="el-scrollbar__view el-select-dropdown__list" style="position: relative;">
    <li class="el-select-dropdown__item hover">
        <span>车赢银行</span>

document.getElementsByClassName(‘hover‘)[0].click();

3.于是用selenium执行js,部分参考代码如下

js1 = "document.getElementsByClassName('el-input__inner')[2].click();"
self.driver.execute_script(js1)

time.sleep(1)

js2 = "document.getElementsByClassName('hover')[0].click();"
self.driver.execute_script(js2)

运行报错:

selenium.common.exceptions.WebDriverException: Message: document.getElementsByClassName(...)[0] is undefined

看这个报错后反复检查了语法,发现没毛病,并且反复在浏览器调试,也没问题,差点怀疑人生了!!!后来发现是前面一个js执行后失去了焦点,导致第二个js找不到焦点了

移动鼠标

1.当元素失去焦点后,死后定位不到,这个就好比你在浏览器上浏览小电影的时候,突然有个人发给QQ抖动窗口,此时你想继续浏览小网站,你需要重新点下网页,让鼠标聚集在网页上才能操作。
解决办法:把鼠标重新移过去

2.使用ActionChains移动鼠标到需要点击的元素上,参考代码

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

# ** 作者:上海-悠悠 QQ交流群:588402570**

driver=webdriver.Firefox()

# 省略中间步骤

js1 = "document.getElementsByClassName('el-input__inner')[2].click();"
self.driver.execute_script(js1)
time.sleep(1)

el = driver.find_element_by_xpath("//*[text()='车赢银行']")
ActionChains(self.driver).move_to_element(el).perform()

js2 = "document.getElementsByClassName('hover')[0].click();"
self.driver.execute_script(js2)

seleniumQQ群:646645429

原文地址:https://www.cnblogs.com/yoyoketang/p/9434160.html

时间: 2024-11-06 03:28:58

appium+python自动化98-非select弹出选择框定位解决的相关文章

Siebel 找字段、下拉菜单设置值、弹出新页面、弹出选择框、设置默认值 、按钮代码

产品缺陷太多,跟用户交互不人性化.例如搜索新建客户功能,用户输入后会自动保存数据,一旦保存后一. 找字段1.简单 CTRL+Q CTRL+Q 服务请求编号----对应的表.字段.长度: 客户编码-----对应的表.字段.长度(弹出新页面):- 点击上面的pick Applet会弹出“选取客户”对话框 有JOIN就不用TABLE:require代表必填 字段有两个值----项目编号 下图确定只有projectNum有用 3.表单中的字段(不在list column中,而是在control) 二.下

框架-弹出选择框(传编号名称)

弹出选择框1.显示页面(列表页)Jquery方法 //选择课件CorrespondingA            $("body").on("click", "#btnCourseware", function() {                var sUrlParam = "&selectcourseware=1";                var dlgParam = {                

Android 底部弹出提示框的解决办法(使用Activity以及PopupWindow)

本片文章主要谈探讨了如何实现在底部弹出提示框背景为半透明效果的实现.想要实现此种效果一般有两种方式一个是使用Activity设置Theme另一种方式就是使用PopupWindow设置样式实现效果. 一,使用Activity 首先是此activity的布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.andro

easyui导出excel无法弹出下载框的解决办法

之前用ajax做的,代码如下(ActionUrl为一般处理程序ashx的路径): $.ajax({ url: ActionUrl + '?action=export&ID=' + $('#fm_ID').val(), dataType: 'json', success: function (jsonstr) { //top.art.dialog.tips('导出成功!'); } }); 没办法弹出下载框. 直接浏览器地址栏输入相关页面地址并打开可以弹出下载框下载,考虑可能是iframe的缘故.

框架-弹出选择框(Jquery传递Json数组)

给一个button按钮,执行方法 Json传值$("body").on("click", "#btnsure", function() {                var cblInfo = $.asGetValuesOfCtrlName("gridform_myTable", "gridSel", "|");                if (cblInfo.length &

生成凭证-启用多个规则弹出选择框界面

1,实现以下两个接口, (1)IDAPTransformAdapter和IPCATransformAdapter, (2)前台注册dapadaptor, (3)查询表格的每一行数据必须有company.id的值 1 package com.kingdee.eas.re.sales.inTransfer.web; 2 3 import com.kingdee.bos.Context; 4 import com.kingdee.bos.metadata.bot.BOTMappingInfo; 5 i

当前应用拦截NFC响应,不弹出选择框教程

从上一篇的NFC支持所类型的卡读取之后,下面要解决的就是NFC的拦截响应,如果这一步没有做,当系统内有多个支持NFC的应用的时候,就会在nfc刷卡的时候弹出多个应用选择,我们需要的场景是,当前应用需要用NFC才去刷卡,然后本应用拦截intent分发(Using the Foreground Dispatch System). 具体的方案: 1.创建PendingIntent来分发要响应的Activity mPendingIntent = PendingIntent.getActivity(thi

Jquery实现弹出选择框选择后返回,支持多级分类

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <t

Bootstrap无法弹出模态框的解决办法

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css"> <link rel=&