首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Selenium WebDriver找不到元素的三种情况

今天抽点时间总结下Selenium WebDriver找不到元素的情况。 当然这里说的是css或者XPath都没写错,定位准确,也并非使用了不稳定的定位语句。...在当前页面找不到这个元素了,但是你自己手动复制到页面开发者工具上查看明明有啊,为啥在代码里面就找不到了呢?...# -*- coding: utf-8 -*- from selenium import webdriver driver = webdriver.Chrome() driver.get('https:...分析: refresh,不论你是主动刷新还是页面自动刷新 back,已经跳转到了其他页面,然后你用driver.back()跳回来,这也是一张新的页面了 跳转到了新的页面,但这张新页面上有一些元素跟之前页面是长得一样的...情况二:iframe原因定位不到元素需要切换Iframe 【参考此文】 这种情况一般发生在有内嵌的iframe的情况下,需要切换一下iframe 另外注意的是有的页面会有多个iframe,找不到元素同样是没有切换

5.3K50

selenium webdriver——设置元素等待

如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难, 如果因为在加载某个元素时延迟而造成ElementNotVisibleException...(不可见元素异常)的情况出现,那么就会降低自动化脚本的稳定性,设置元素等待可改善这种问题造成的不稳定。...WebDriver提供了两种类型的等待: 显示等待: 具体格式如下: from selenium import webdriver from selenium.webdriver.common.by import...'dropdown1').is_displayed()) #鼠标定位到子元素上 webdriver.ActionChains(dr).move_to_element(menu).perform()...is_displayed() 该元素是否用户可以见 move_to_element(menu) 移动鼠标到一个元素中,menu上面已经定义了他所指向的哪一个元素 to_element

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何在Selenium WebDriver中查找元素?(二)

    但是,有时我们在DOM中找不到它们中的任何一个,而且有时某些元素的定位符在DOM中会动态变化。在这种情况下,我们需要使用智能定位器。这些定位器必须能够定位复杂且动态变化的Web元素。...public class LocateByXPATHSel { public static void main (String [] args) { WebDriver...公共类LocateByXPATHSel { 公共静态void主(字符串[] args){ WebDriver驱动程序=新的FirefoxDriver(); // Chrome的实例| Firefox...以下 开始在给定父节点之后定位元素。它在以下语句之前找到元素并将其设置为顶部节点,然后开始查找该节点之后的所有元素。...语法: // tagName [@ attribute = value] //之前:: tagName 在Selenium WebDriver中查找元素:在元素数组中查找元素 ?

    2.9K20

    如何在Selenium WebDriver中查找元素?(一)

    在Selenium WebDriver中查找元素:“ FindElement”和“ FindElements”之间的区别 查找元素 查找元素 如果定位器发现了多个Web元素,则返回第一个匹配的Web元素...返回匹配的Web元素列表 如果找不到元素,则抛出NoSuchElementException 如果找不到匹配的元素,则返回一个空列表 此方法仅用于检测唯一的Web元素 此方法用于返回匹配元素的集合。...在Selenium WebDriver中查找元素:定位器策略/定位器类型 定位器策略可以是以下用于查找元素或FindElements的类型之一– ID Name ClassName TagName Link...句法: public class LocateByID { public static void main (String [] args) { // Open browser WebDriver driver...句法: public class LocateByName { public static void main (String [] args) { // 打开浏览器 WebDriver driver

    6.1K10

    每周学点测试小知识——WebDriver定位元素

    上周四下午的是芒果给大家介绍的自动化相关知识——WebDriver定位元素,在这里芒果给大家做个小介绍: 下面是这次课程的思维导图: 这里我们先来看看tag name的定位方式:大家也知道tag name...识别率极低,很难区分,所以我们很少使用,大多时候会使用find_elements_by_tag_name来定位一组元素,通过对这组元素进行遍历再进行操作: 比如定位如下图所示网页上面的所有复选框选框:...#定位一组元素 inputs = d.find_elements_by_tag_name("input") #对定位的元素进行遍历,找到符合条件的元素 for i in inputs: if...第一点,当我们要定位的页面元素有id属性时,最好尽量用id来定位,简单直接; 第二点,如果遇到少数元素确实找不到其他好的定位方式,我们可以选择稍微复杂xpath或css; 第三点,当要我们定位一组元素相同元素时...至于Selenium环境搭建、WebDriver介绍、其他的定位方式的使用小技巧

    20430

    python selenium-webdriver 元素操作之键盘操作

    selenium 提供了比较完整的键盘操作,在使用的模拟键盘操作之前需要我们导入from selenium.webdriver.common.keys import Keys即可,然后就可以来模拟键盘操作...#导入Keys 模块,然后我们看看Keys 模块定义了那些按键 from selenium.webdriver.common.keys import Keys 导入模块以后,我们可以看看具体的定义按键内容...#-*- coding:utf-8 -*- from selenium.webdriver.common.keys import Keys from selenium import webdriver...import Keys from selenium import webdriver import time driver = webdriver.Chrome() driver.maximize_window...上面的两个例子说明了使用组合键和单个按键来操作元素,因为按键的使用起来比较简单,主要是认识每个按键代表的意思,这样我们就可以顺利的使用按键

    2K10

    python里三种等待元素的方法

    在做web或app的自动化测试经过会出现找不到元素而报错的情况,很多时候是因为元素 还没有被加载出来,查找的代码就已经被执行了,自然就找不到元素了。...Driver=webdriver.Chrome() Driver.implicitly_wait(10)#等待10s Driver.get(“XXX”) 这个方法的缺点是你需要的元素已经加载出来了,但页面还没有加载完...((By.ID,'su'))) '''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大 于0''' WebDriverWait(driver,10).until(EC.visibility_of...(driver.find_element(by=By.ID,value='kw'))) '''判断元素是否可见,如果可见就返回这个元素''' WebDriverWait(driver,10).until...dom或不可见,如果可见返回False,不可见返回这个元素''' #注意#swfEveryCookieWrap在此页面中是一个隐藏的元素 WebDriverWait(driver,10).until(

    1.9K10

    Java Selenium 自动化测试实践探索

    基础准备初始化Java 中所有的对象都可以 new 出来,Selenium也不例外,但这里不叫Selenium,而是需要使用具体的 WebDriver。...NoSuchElementException找不到元素的原因很多xpath的拼写有误当前WindowHandle不在对应画面元素在frame中,需要driver.switchTo().frame("Frame...但自动化操作在多变的网页操作中,如果不加以针对,经常会出现各种各样的 Bug。高加载速度:网速快,页面逻辑简单。等待页面有时,需要等待页面加载完成,才会有对应元素。...,元素也有可能未出现,需要再根据自定义条件:// 可见作为条件ExpectedConditions.visibilityOfElementLocated(by);// 不可见作为条件ExpectedConditions.invisibilityOfElementLocated...(by);可见与不可见的条件包含两种情况,一个是元素的 display 为 none ,一个是页面不包含该元素。

    14830

    js判断元素在某个区域内是否可见(转)

    getBoundingClientRect介绍 getBoundingClientRect获取元素位置 getBoundingClientRect用于获得页面中某个元素的左,上,右和下分别相对浏览器视窗的位置...getBoundingClientRect是DOM元素到浏览器可视范围的距离(不包含文档卷起的部分)。...该函数返回一个Object对象,该对象有6个属性:top,lef,right,bottom,width,height;这里的top、left和css中的理解很相似,width、height是元素自身的宽高...right是指元素右边界距窗口最左边的距离,bottom是指元素下边界距窗口最上面的距离。 getBoundingClientRect()最先是IE的私有属性,现在已经是一个W3C标准。...以前的办法是通过各种offset判断元素是否可见,网上很多教程,大家可以自己去查找。

    7.6K20

    selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘

    欢迎关注公众号:TestingStudio,学习更多测试开发必备技能 pycharm新建了一个项目,用于做web自动化测试,直接安装了selenium这个库,发现之前写的Selenium元素定位的代码运行之后会报错...接下来就是讨论有关于新版本后Selenium定位元素代码的新语法,大家后面别再踩这个坑了。...Selenium3版本的元素定位写法 inputTag = driver.find_element_by_id("value") # 利用ID定位 inputTags = driver.find_element_by_class_name...su“,以旧版本的写法使用id值查找搜索框应该是: searchTag = driver.find_element_by_id("su") 在版本没有更新之前,通常情况下运行都是能够正确定位到对应的元素...4版本的Selenium已经不再支持上面的写法,我们需要导入其他方法,改变我们的元素定位写法: 引入By方法 from selenium.webdriver.common.by import By 新元素定位方法

    5.2K00
    领券