本节课程的下拉框是那种默认隐藏,当鼠标移到菜单上下拉框才显示的。如果直接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. hdu-2036求任意多边形面积

    改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  2. kohana reading session data error(session_start)引起的错误

    在项目中碰到一个很奇怪的问题,同一个网站目录下两个项目,手机端访问从A项目切换到B项目,总是报错,session_start抛错,后来排查了很久,终于发现是存储session的时候直接存储的对象,导致 ...

  3. ansible部署,规划

    部署管理服务器 第一步:先检查有没有ssh服务 [root@iZm5eeyc1al5vzh8bo57zyZ ~]# rpm -qf /etc/init.d/sshd openssh-server-5. ...

  4. sqoop数据校验

    sqoop数据校验 # check data oracle_cnt=$(sqoop eval \ -Dmapred.job.queue.name=${queue} \ --connect ${conn ...

  5. bean copy

    最初采用apache beanutils,性能很低.后来转为hutool,但不能复制指定格式的日期,所以采用性能很高的com.github.yangtu222.BeanUtils 它已经实现了 cop ...

  6. 在windows上安装common lisp开发环境

    (2014.1写于CSDN的文章) 最近对lisp非常感兴趣,因此在google中搜索了“common lisp install windows”, 想装一个开发环境玩玩. 第一条结果就是 “Gett ...

  7. UGUI ScrollRect 各参数的代码引用以及作用

  8. Java基础10-循日历制作

    编写过程:先指定固定的年份来输出指定月份的日历 /*计算1900年1月1日到2018年11月1日一共有多少天 计算月份 对7进行取模,结果就为星期几 */ import java.util.Scann ...

  9. Murano Weekly Meeting 2015.10.20

    Meeting time: 2015.October.20th 1:00~2:00 Chairperson:  Serg Melikyan, PTL from Mirantis Meeting sum ...

  10. OpenStack Weekly Rank 2015.08.10

    Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 5 1 1 6 12 Sw ...