本节课程的下拉框是那种默认隐藏,当鼠标移到菜单上下拉框才显示的。如果直接getelement会报错,提示元素不可见:

so,得先让下拉列表显示出来再获取元素

用到的新知识:

is_display() 是否显示

webdriver.ActionChains(driver).move_to_element(menu).perform() 鼠标移到menu上

webDriverWait(driver,10).until(条件)  每10s监听一次,直到条件成立继续执行后续代码

脚本学习前,先网上找有下拉菜单的网页,或者在脚本同一个目录下新建test2.html,将以下内容拷贝进去保存。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test2</title>
<style>
.dropdown{
postion:relative;
display: inline-block;
} .dropdownlist{
display:none;
postion:absolute;
background-color:#f9f9f9;
width:160px;
}
li, li a{padding:10px;} .dropdown:hover{background-color:#ccc;}
.dropdown:hover .dropdownlist{display:block;} ul{list-style-type: none} .dropdownlist a:hover{
background-color:#00ffff;
}
</style>
</head>
<body>
<div class="dropdown">
<a href="#">link1</a>
<ul class="dropdownlist">
<li><a href="#" tabindex="-1">innertext</a></li>
<li><a href="#" tabindex="-1">innertext</a></li>
<li><a href="#" tabindex="-1">innertext</a></li>
<li><a href="#" tabindex="-1">innertext</a></li>
<li><a href="#" tabindex="-1">innertext</a></li>
<li><a href="#" tabindex="-1">innertext</a></li>
<li><a href="#" tabindex="-1">innertext</a></li>
<li><a href="#" tabindex="-1">innertext</a></li>
</ul>
</div>
</body>
</html>

python脚本:

#coding=utf-8
#下拉列表定位
from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait #打开网页
driver=webdriver.Firefox() driver.get('file:///F:/selenium/test2.html')
#鼠标移到link1上显示下拉框
menu=driver.find_element_by_link_text("link1")
webdriver.ActionChains(driver).move_to_element(menu).perform()
#监听下拉框是否显示,显示则继续执行代码
WebDriverWait(driver,10).until(lambda dr:dr.find_element_by_class_name("dropdownlist").is_displayed)
#获取下拉框的元素,鼠标移动
droplists=driver.find_element_by_class_name("dropdownlist").find_elements_by_tag_name("li")
for li in droplists:
webdriver.ActionChains(driver).move_to_element(li).perform() time.sleep(2)
driver.quit()

淘宝首页 简单脚本:

#coding:utf-8

from selenium import webdriver
import time dr=webdriver.Firefox()
dr.get("http://www.taobao.com") #鼠标移到顶部菜单我的淘宝上
menu=dr.find_element_by_id("J_SiteNavMytaobao")
webdriver.ActionChains(dr).move_to_element(menu).perform()
time.sleep(1)
menu.find_element_by_class_name("site-nav-menu-list").find_element_by_tag_name("a").click() time.sleep(2)
dr.quit()

Selenium入门系列5 默认不显示的下拉列表元素操作的更多相关文章

  1. Netty入门系列(3) --使用Netty进行编解码的操作

    前言 何为编解码,通俗的来说,我们需要将一串文本信息从A发送到B并且将这段文本进行加工处理,如:A将信息文本信息编码为2进制信息进行传输.B接受到的消息是一串2进制信息,需要将其解码为文本信息才能正常 ...

  2. Selenium入门系列4 选择并操作一组元素

    选中一组元素的方式也是8种,与选中单个元素一一对应.区别只在于element与elements.elements取到的是一个数组,element取符合条件的第一个元素. 首先在脚本的目录下新建test ...

  3. Selenium入门系列3 单个元素的定位方法

    UI自动化首先要识别对象,再操作对象,最后判定实际结果与预期结果是否一致. 这一节学习的是识别单个对象,webdriver提供了8种方式. <a id="idofa" cla ...

  4. Selenium入门系列2 窗口大小控制

    selenium控制窗口最大化.适合手机的宽度.适合pad的宽度等尝试下实例,网站是否做了响应式布局 #coding=utf-8 # 改变浏览器窗口大小.前进后退 from selenium impo ...

  5. Selenium入门系列1 打开浏览器访问网页,退出浏览器

    对于功能自动化的理解就是用测试工具替代手工.手工怎么操作的,工具也如何操作. 手工测试:在前置条件下,执行一定的操作步骤>与预期结果对比 功能自动化:在前置条件下,识别对象 >操作对象&g ...

  6. 【 D3.js 入门系列 — 2 】 绑定数据和选择元素

    1. 如何绑定数据 D3 有一个很独特的功能:能将数据绑定到 DOM 上,也就是绑定到文档上.这么说可能不好理解,例如网页中有段落元素<p>,我们可以将整数 5 与 <p>绑定 ...

  7. Spark RDD/Core 编程 API入门系列之动手实战和调试Spark文件操作、动手实战操作搜狗日志文件、搜狗日志文件深入实战(二)

    1.动手实战和调试Spark文件操作 这里,我以指定executor-memory参数的方式,启动spark-shell. 启动hadoop集群 spark@SparkSingleNode:/usr/ ...

  8. Java入门系列-23-NIO(使用缓冲区和通道对文件操作)

    NIO 是什么 java.nio全称java non-blocking(非阻塞) IO(实际上是 new io),是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(bo ...

  9. Selenium 入门到精通系列:六

    Selenium 入门到精通系列 PS:Checkbox方法 例子 HTML: <html> <head> <title>测试页面</title> &l ...

随机推荐

  1. lintcode - 被围绕的区域

    class Solution { public: /* * @param board: board a 2D board containing 'X' and 'O' * @return: nothi ...

  2. kafka的offset和ProcessingGuarantee

    https://blog.csdn.net/xianpanjia4616/article/details/84347087 https://m.2cto.com/net/201703/616024.h ...

  3. prototype.js

    (1)$() 方法是在DOM中使用过于频繁的 document.getElementById() 方法的一个便利的简写, 就像这个DOM方法一样,这个方法返回参数传入的id的那个元素. (2)

  4. android Firebase中配置 Crashlytics

    首先登陆Google账号 https://firebase.google.com/ 创建项目 配置Android 1.注册应用 2.下载配置文件 3.添加firebaseSDk 配置后台分析的Cras ...

  5. 关于imageview matrix

    Matrix 是 Android SDK 提供的一个矩阵类,它代表一个 3 X 3 的矩阵 那么这 9 个浮点数的作用和意义是什么呢,从 Android 官方文档上看,它为这个数组中的每一个元素都定义 ...

  6. 用Jmeter 测试接口--需要登录怎么办?

    一.试用场景---当你测试的接口 需要登录,然后 你又不知道怎么让这测这个接口前登录?这篇文章写得是 用静态的Token 值,来测试需要登录的接口 二.步骤 1  首相用Jmeter   将要测试的接 ...

  7. DataColumn.Expression提示“...循环引用”的错误

    我碰到这个问题的时候,在网上找了找,找到了有好几个提出这个问题的人,但是都没有得到解答,当时很郁闷.然后再看看msdn中的解释与自己的测试,才把这个问题给解决了. 代码如下: person.Colum ...

  8. 从零开始的全栈工程师——js篇(cookie)

    Cookie是由服务器端生成,发送给User-Agent,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器,对cookie知识感兴 ...

  9. BZOJ3329: Xorequ(二进制数位dp 矩阵快速幂)

    题意 题目链接 Sol 挺套路的一道题 首先把式子移一下项 \(x \oplus 2x = 3x\) 有一件显然的事情:\(a \oplus b \leqslant c\) 又因为\(a \oplus ...

  10. 在CentOS上配置tomcat服务

    # hapday start 2016-02-04 #!/bin/bash # description: Tomcat Start Stop Restart # processname: tomcat ...