Selenium  如何定位动态元素:

测试的时候会遇到元素每次变动的情况,例如:

<div id="btn-attention_2030295">...</div>

这个id 可能每次都不同,所以如何定位到该类元素呢?

1. 根据其他属性定位

如果有其他固定属性,最先考虑的当然是根据元素的其他属性来定位,定位方式那么多,何必在这一棵树上吊死。。

2.根据相对关系定位

根据其附近的父节点、子节点、兄弟节点定位,关于这方面,博主之前的一篇文章可作为参考:Python selenium —— 父子、兄弟、相邻节点定位方式详解

3.根据DOM顺序index定位

这个很简单,找到该元素在主文档或某级父节点中的index,然后根据index可轻松定位,不过这种方式可能不够稳定,如果可以,还是用其他的方法定位更加合适。

4.根据部分元素属性定位

xpath中提供了三个非常好的方法来为我们定位部分属性值:

driver.find_element_by_xpath("//div[contains(@id, 'btn-attention')]")
driver.find_element_by_xpath("//div[starts-with(@id, 'btn-attention')]")
driver.find_element_by_xpath("//div[ends-with(@id, 'btn-attention')]") # 这个需要结尾是‘btn-attention’

Selenium 显式等待与隐式等待:

在selenium中(appium通用)常用的等待分为显示等待WebDriverWait()隐式等待implicitly_wait()强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别

  • sleep(): 强制等待,设置固定休眠时间。 python 的 time 包提供了休眠方法 sleep() , 导入 time 包后就可以使用 sleep(),进行脚本的执行过程进行休眠。
  • implicitly_wait():隐式等待,也叫智能等待,是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。
  • WebDriverWait():显式等待,同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException

#添加智能等待
driver.implicitly_wait(30)               #implicitly_wait()方法比 sleep() 更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待
driver.find_element_by_id("su").click()

public boolean isByElementDisplayed(By by, int time) {
boolean status = false;
if (driver.findElement(by).isDisplayed() == false) {
driver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS);
} else {
status = true;
}
return status;
}

#添加固定休眠时间
sleep(5)                     #sleep()方法以秒为单位,假如休眠时间小时 1 秒,可以用小数表示。
driver.quit()

关于强制等待和隐式等待在上面注释中已做了说明

下面主要介绍一下WebDriverWait() 显示等待,语法格式如下:

python实例:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoAlertPresentException,TimeoutException,NoSuchElementException
driver=webdriver.Firefox()
driver.get("http:www.baidu.com")
WebDriverWait(driver,10,1,NoSuchElementException).until(lambda driver:driver.find_element_by_name("d_status")) 
WebElement e = (new WebDriverWait( driver, 10)) .until(
new ExpectedCondition< WebElement>(){ //等10秒直到找到id元素
@Override
public WebElement apply( WebDriver d) {
return d.findElement( By.id("id locator"));
}
}
);

Selenium  基本API

参考: https://www.cnblogs.com/fnng/p/3968009.html

Open Browser

Close Browser  Close All Browsers

Maximize Browser Window

Get Window Size

富文本编辑框推荐使用Js

 String text = "你好呀";
String js = "document.getElementById('ueditor_0').contentDocument.write('" + text + "');";
((JavascriptExecutor) driver).executeScript(js);

Testng 失败后重试:

https://www.cnblogs.com/testway/p/6118148.html

xpath定位:

定位路径可以是相对路径,也可以是绝对路径。绝对定位路径以一个斜线“/”开头,而相对定位路径则没有。如:/div/input 和 div/input

   第一种方法:通过绝对路径做定位

By.xpath("html/body/div/form/input")
By.xpath("//input")
第二种方法:通过元素索引定位
By.xpath("//input[4]")
第三种方法:使用xpath属性定位(结合第2、第3中方法可以使用),前面用:tagName [@ 属性='属性值'] 表示
By.xpath("//input[@id='kw1']")
By.xpath("//input[@type='name' and @name='kw1']")
第四种方法:使用部分属性值匹配(最强大的方法)
By.xpath("//input[start-with(@id,'nice')
By.xpath("//input[ends-with(@id,'很漂亮')
By.xpath("//input[contains(@id,'那么美')]")

            

Selenium 定位元素原理,基本API,显示等待,隐式等待,重试机制等等的更多相关文章

  1. 【Selenium】显示、隐式等待

    显示等待 WebDriverWait 超时抛出TimeOutException,默认500毫秒 public class WaitToReturnElement { /* * 设置超时时间为5秒,返回 ...

  2. 重写selenium 的 click()操作,使其变成隐式等待

    selenium 页面常会因为页面加载慢而出现element 不能被点击到的情况,比如加载过程中出现遮罩,导致element 可见不可点.以下方法重写click(),用隐式等待解决这个问题. 基本思路 ...

  3. 转 Python selenium 强制等待显示等待隐式等待

    1. 1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间. 看代码: # -*- codi ...

  4. UI自动化学习笔记- Selenium元素等待(强制等待、显示等待、隐式等待)

    一.元素等待 1. 元素等待 1.1 什么是元素等待 概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程 意思就是:等待指定元素已被加载出来之后,我们才去定位该元素,就不会出现定位失败的现 ...

  5. day95_11_28,selenium定位元素,cookies获取

    一.selenium selenium可以将一些资源定位: # 1.find_element_by_id 根据id找 # 2.find_element_by_link_text 根据链接名字找到控件( ...

  6. selenium 找不到元素 (显式等待 和隐式等待的区别)

    selenium自动化页面元素不存在异常发生的原因有一下几点: (1)页面加载时间过慢,需要查找的元素程序已经完成但是页面还未加载成功.此时可以加载页面等待时间. (2)查到的元素没有在当前的ifra ...

  7. selenium的显示等待和隐式等待的区别

    什么是显示等待和隐式等待?显示等待就是有条件的等待隐式等待就是无条件的等待 隐式等待 当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出 ...

  8. python+selenium显示等待、隐式等待和强制等待的区别

    在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(a ...

  9. selenium 显示等待、隐式等待、强制等待

    如今大部分web程序使用Ajax技术,当浏览器加载页面时,页面元素可能不是同时加载完成,如果因为加载某个元素超时导致ElementNotVisibleException的情况出现,自动化脚本的稳定性就 ...

随机推荐

  1. Python基础4 迭代器、装饰器、软件开发规范

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  2. hive安装教程本地模式

    1.安装模式介绍: Hive官网上介绍了Hive的3种安装方式,分别对应不同的应用场景. a.内嵌模式(元数据保村在内嵌的derby种,允许一个会话链接,尝试多个会话链接时会报错) b.本地模式(本地 ...

  3. delphi 属性编辑器

    RegisterPropertyEditor TPictureEditor = class(TClassProperty)   RegisterPropertyEditor(TypeInfo(TPic ...

  4. NativeClient开发指南

    https://blog.csdn.net/column/details/24458.html

  5. leetcode 题解: Gray Code

    第一眼看到就是枚举,回溯法. n位的ans就是在n-1的ans的基础上,每一个在首位加上1. 但是有个难点,要保证相邻两数之间只有一位在变化,怎么办? 首先 00 00 01 00 01 11 10 ...

  6. 【坑】tableView cell默认选中

    在tableView展示的过程时候,如果想一开始就有一些cell默认被选中,不能在cellForRowAtIndexPath中cell.selected=YES, 必须在willDisplayCell ...

  7. keal

    I remember the wonderful moment you appeared before me, like a fleeting vision, like a genius of pur ...

  8. 解决Mac上安装mysqlclient的错误

       要想使用python操作mysql,那么就需要安装python操作数据库的驱动,由于mysqldb不支持python3,我选择安装mysqlclient, 命令行输入:pip3 install  ...

  9. Linux命令:索引

    目录 A B C D E F G H I  jobs J K L M N   nohup O P Q R S T  trU V W X Y Z A alias B C cd D dirs E F G ...

  10. Eclipce 配置javaEE

    Eclipse 安装JavaEE插件   Oxygen版Eclipse 导入项目会自动安装你项目需要的一些插件,但是有时候会安装失败,需要手动安装: 这里以Dynamic Web Project项目为 ...