FindElement和FindElements命令

Python + Selenium —— 元素定位函数 find_element! WebDriver中的 find_element() 方法用来查找元素,并返回 WebElement 对象。是 WebDriver 中最常用的方法。前面提到的八种定位方式都有对应的方法,如find_element_by_id()。在 WebDriver 中还有一种用法,就是单纯的find_element()。需要通过参数传入定位方式和定位语句。 阅读详情

接下来要做的是与应用程序的不同元素进行交互,因此需要在交互之前首先定位元素。定位元素可以在AndroidDriver 实例本身上完成,因为它为我们提供了“ Find Element ”和“ Find Elements ”方法来定位Appium上的元素。在本章中,我们将学习如何使用FindElement和FindElements命令或如何使用具有不同属性的Appium UiAutomatorViewer / Appium Inspector定位元素。

 

如何在Appium中使用FindElement和FindElements方法

Find Element和Find Elements方法之间的区别是第一个返回WebElement对象,否则它会抛出异常而后者返回WebElements列表,如果没有DOM元素与查询匹配,它可以返回一个空列表。在查找方法采取定位器调用或查询对象通过。“ 按”策略列在下面。

 

按名字

这也是定位元素的有效方法,但问题与UI开发人员在页面上具有非唯一名称或自动生成名称的ID相同。使用此策略,将返回名称属性值与位置匹配的第一个元素。如果没有元素具有匹配的name属性,则将引发NoSuchElementException 。

示例1:如果给出的元素如下:

UIAutomatorViewer_2_2

可以使用以下命令定位上述元素:

 

1

2

3

driver.findElement(By.name("Shop byDepartment")).click();

//or

driver.findElementByName("Shop byDepartment").click();

 

示例2:如果给出的元素如下:
UIAutomatorViewer_4

可以使用以下命令定位上述元素:

 

1

2

WebElement element = driver.findElement(By.name("Home"));

element.click();

 

如何在Appium中使用' content-desc '属性查找元素?

content-desc属性可以与 findElementByName的text 属性完全一样使用。看下面的例子:

示例3:如果给出的元素如下:

UIAutomatorViewer_5

可以使用以下命令定位上述元素:

 

1

driver.findElementByName("Sign inHello. Link").click();

 

按类名

有了这个,你可以根据class属性的值找到元素。如果一个元素有很多类,那么这将匹配它们中的每一个。一个类可以包含许多元素。

示例:如果给出的元素如下:
UIAutomatorViewer_3

可以使用以下命令定位上述元素:

 

1

2

3

4

 

driver.findElementByClassName("android.widget.ImageView").click();

//or

driver.findElement(By.className("android.widget.ImageView")).click();

注意:只有当这是一个唯一的类名时才能有效地工作,这在Appium中通常不是这种情况。但是我们仍然可以将 className与其他结合使用,我们将在下面给出一个详细的例子。

 

按ID

使用此策略,将返回id属性值与位置匹配的第一个元素。如果没有元素具有匹配的id属性,则将引发NoSuchElementException 。这是定位元素的最有效和首选方式,因为大多数时间ID都是唯一的。

示例:如果给出的元素如下:

UIAutomatorViewer_2

可以使用以下命令定位上述元素:

 

1

2

3

4

5

6

WebElement element = driver.findElementById("in.amazon.mShop.android.shopping:id/action_bar_burger_icon");<br>element.click();

// or

WebElement element = driver.findElement(By.id("in.amazon.mShop.android.shopping:id/action_bar_burger_icon"));<br>element.click();

element.click();

// or

driver.findElementById("in.amazon.mShop.android.shopping:id/action_bar_burger_icon").click();

 

通过XPath

Xpath 在Appium中是一个真正的祝福,因为你会遇到许多情况,你没有任何选择,只能使用 xpath。Xpath可以是相对的和绝对的,但建议始终使用相对xpath。

让我们看一下Amazon Sign In模块的Password字段下面的示例。密码文本框没有附加任何ID,没有任何文本值和content-desc。但是,在这种情况下,我们的className填充但同样是没有帮助,因为类名的的用户名文本框也一样。

示例:如果给出了这样的元素

UIAutomatorViewer_7

如果您检查' (5)查看{密码} [...] [...] ',您会注意到该元素的content-desc值为' Password '。这意味着我们可以使用属性content-desc轻松找到(5)元素,然后遍历到(6)元素,然后我们可以轻松地到达其子元素EditText。

要找到(5)元素,可以使用xpath:

 

1

driver.findElementByXPath("//android.view.View[@content-desc='Password']");

 

如何在Xpath中使用兄弟姐妹

但是我们的场景说我们需要找到(6)元素的子元素。 因此,首先需要定位(6)哪个是(5)的兄弟。在Xpath中,有一种方法可以找到兄弟元素。下面的语句将找到(6)元素:

 

1

driver.findElementByXPath("//android.view.View[@content-desc='Password']/following-sibling::android.view.View");

一旦我们达到(6)元素,很容易找到密码的文本字段是(6)的孩子,并且可以用这个来完成:

 

1

driver.findElementByXPath("//android.view.View[@content-desc='Password']/following-sibling::android.view.View/android.widget.EditText");

 

完整的代码现在看起来像这样:

 

1

driver.findElementByXPath("//android.view.View[@content-desc='Password']/following-sibling::android.view.View/android.widget.EditText").sendKeys("Lakshay");

 

 

如何使用父节点查找元素?

这也是在Appium中定位元素的一项非常重要的技术。在许多情况下,locate元素的唯一选择是首先获取父元素,然后获取其子对象以对子元素执行任何操作。

请考虑此方案的用户名文本框。UserName文本框没有附加任何ID,没有任何文本值和content-desc。但是,在这种情况下,我们的className填充但同样是没有帮助,因为类名的的密码文本框也一样“ android.widget.EditText ”。如果我们向EditText的父级迈进一步,那么它是一个View,其className为' android.view.View ',它同样不是唯一的。所以,我们需要再一步找到独特的父母,这是亚马逊登录如下图所示:

UIAutomatorViewer_7_1

可以使用以下命令定位上述元素:

 

1

WebElement parentElement = driver.findElement(By.name("Amazon Sign In"));

使用上面的语句,我们将能够获取父元素,但我们对父元素的子元素感兴趣。使用以下语句,我们将获得所选父级下的所有子元素“ 视图”:

 

1

List<WebElement> childElements = parentElement.findElements(By.className("android.view.View"));

现在我们在childElements中有了所有的Views元素,但我们对第5个子元素感兴趣,因为用户名文本框位于第5个View元素下。请参阅以下屏幕截图以获取帮助
UIAutomatorViewer_6

可以使用以下命令定位上述元素:

 

1

2

//This is to get the 5th child element

WebElement mainElement = childElements.get(4);

注意:我们为第5个元素提到了.get(4),因为索引从零开始。

一旦我们得到主要元素(第5个),就很容易指出它的子元素:

 

1

mainElement.findElements(By.className("android.widget.EditText")).sendKeys("Your_UserName");

完整的代码现在看起来像这样:

 

1

2

3

4

WebElement parentElement = driver.findElement(By.name("Amazon Sign In"));

List<WebElement> childElements = parentElement.findElements(By.className("android.view.View"));

WebElement mainElement = childElements.get(4);

mainElement.findElement(By.className("android.widget.EditText")).sendKeys("Your_USerName");

 

 

练习练习

1)启动Appium Node Server

2)启动Amazon App

3)使用By.ID单击“按部门购买”。

4)使用By.ClassName单击“菜单”按钮以显示菜单列表。

5)使用By.Name单击Home链接以导航回主屏幕。

6)使用By.Name单击SIgn In链接登录应用程序。

7)使用By.xpath和Sibling策略在UserName字段中输入文本

8)使用父节点策略在密码字段中输入文本

9)使用content-desc属性单击Submit按钮。

 

solution

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

package amazon;

 

import io.appium.java_client.android.AndroidDriver;

 

import java.io.File;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.List;

import java.util.concurrent.TimeUnit;

 

import org.openqa.selenium.By;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.remote.CapabilityType;

import org.openqa.selenium.remote.DesiredCapabilities;

 

public class Amazon_LogIn_Test {

private static AndroidDriver driver;

 

public static void main(String[] args) throws MalformedURLException {

File classpathRoot = new File(System.getProperty("user.dir"));

File appDir = new File(classpathRoot, "/Apps/Amazon/");

File app = new File(appDir, "in.amazon.mShop.android.shopping.apk");

 

DesiredCapabilities capabilities = new DesiredCapabilities();

capabilities.setCapability(CapabilityType.BROWSER_NAME, "");

capabilities.setCapability("deviceName", "Micromax A311");

capabilities.setCapability("platformVersion", "4.4.2");

capabilities.setCapability("platformName", "Android");

capabilities.setCapability("app", app.getAbsolutePath());

capabilities.setCapability("appPackage", "in.amazon.mShop.android.shopping");

capabilities.setCapability("appActivity", "com.amazon.mShop.home.HomeActivity");

 

driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);

 

// Click on Shop by Deparment link

driver.findElementById("in.amazon.mShop.android.shopping:id/web_home_shop_by_department_label").click();

// Click on Main menu

driver.findElementByClassName("android.widget.ImageView").click();

// Click on Home link under Main menu

driver.findElement(By.name("Home")).click();

// Click on Sign In link on the Home Screen

driver.findElementByName("Sign inHello. Link").click();

 

// Entering UserName using Parent node strategy

WebElement parentElement = driver.findElement(By.name("Amazon Sign In"));

List<WebElement> childElements = parentElement.findElements(By.className("android.view.View"));

WebElement mainElement = childElements.get(4);

mainElement.findElement(By.className("android.widget.EditText")).sendKeys("Your_UserName");

// Entering Password using Xpath & Sibling strategy

driver.findElementByXPath("//android.view.View[@content-desc='Password']/following-sibling::android.view.View/android.widget.EditText").sendKeys("Your_Password");

// Click on Sign In button

driver.findElement(By.name("Sign in")).click();

// This is to kill the Android driver

driver.quit();

 

}

 

}

 

Appium-Python-Client 源码剖析 (一) driver 的元素查找方法 Appium-Python-Client是一个用于Python语言的Appium客户端库,它提供了丰富的API和功能,用于编写和执行移动应用程序的自动化测试。在本文中,我们将深入剖析Appium-Python-Client的源码,重点关注driver的元素查找方法。Appium 的实用方法都藏在 Client 的源码里,我尝试在这里剖析一下 Client 的源码,第一篇,我们直接从大家最关注的元素查找说起。注意! 阅读详情

相关推荐

Selenium元素定位方法论:findElement与findElements原理及实战避坑

Selenium元素定位是UI自动化测试的核心基础能力,其本质并非简单调用API,而是对浏览器DOM机制、前端框架生命周期和页面真实状态的深度理解。findElement与findElements在底层查询方式、异常处理逻辑和性能表现上存在根本差异,直接影响脚本稳定性与可维护性。CSS选择器因引擎级优化成为首选,XPath则在复杂语义匹配中不可替代;而动态ID、Shadow DOM、iframe、多窗口等场景更需结合显式等待、属性正则匹配与上下文感知策略。本文聚焦Selenium定位的工程化实践,覆盖从新手

abc20899的专栏 338

selenium---元素定位(find_element)

find_element属于定位元素的一种方法,包含了常用的定位方法。在使用find——element 时 一定要导入相关的包,不然会报错。

qq_54426859的博客 1万+

Selenium findElement与findElements核心差异解析与实战选型指南

在Web自动化测试中,元素定位是基础且关键的技术环节,它直接关系到脚本的稳定性和执行效率。Selenium WebDriver提供了findElement和findElements两个核心方法,它们在行为逻辑和异常处理上存在本质区别:findElement采用“严格模式”,要求元素必须存在,否则立即抛出NoSuchElementException,适用于验证必须存在的核心页面组件;而findElements采用“宽容模式”,无论是否找到匹配元素都返回列表,允许脚本通过判断列表是否为空来优雅处理动态或可选元素

weixin_42635064的博客 275

python3+selenium4自动化测试-元素定位之find_element()-基础篇4

学习selenium自动化测试,如何使用WebDriver在页面上准确的查找到要操作的元素是最基本的技术之一,以百度搜索为例,我们要想使用selenium完成搜索操作,打开浏览器进入百度首页后的第一件事,就是找到我们要操作的元素,如文字输入框、百度一下按钮等 而要想完成元素定位,Selenium WebDriver为我们提供了多种元素选择器,其中,定位单个元素使用方法find_element(),包括: 1、通过ID属性定位 一般来说,如果需要定位的元素的ID属性可用、独特且始终可预知的,使用ID属性定

谜城的博客 2万+

Selenium findElement与findElements深度解析:从原理到实战的自动化测试核心

在Web自动化测试中,元素定位是构建稳定测试脚本的基石。Selenium WebDriver提供了findElement和findElements两个核心方法,其设计差异体现了对Web应用状态不确定性的不同处理哲学。findElement要求元素必须存在,否则抛出异常,适用于确定性的交互场景;而findElements则返回元素列表,能优雅处理元素缺失状态,提升了脚本的健壮性。理解两者的异常处理机制、与显式等待的协同,以及在不同业务场景下的选型策略,是编写高效、可靠自动化测试代码的关键。本文通过实战场景对比

weixin_30129025的博客 318

Python逻辑回归——以车险定价为例(附代码)

保费定价也成为费率厘定,是保险公司运营的环节之一。其过程是根据保单(被保险人)的损失经验和其他相关信息建立模型,并且对未来的保险成本(赔款、代理人佣金、一般管理费用、理赔费用以及支持该业务所需的资本金成本)进行预测的过程。保险公司实际使用的费率还会受到市场供求关系和公司自身发展战略的影响。汽车保险也称机动车辆保险,失意机动车辆本身及其第三者责任等为保险标的的一种运输工具险,在非寿险井算领域中占有重要地位。

m0_62929945的博客 1984

selenium中的find_element方法

selenium中的find_element方法使用说明

beichanbb的博客 6万+

【JavaSE】之流程控制与方法

Java基础之Java流程控制与方法相关知识介绍~

小新要变强的博客 5798

[Selenium+Java] Find Element and Find Elements in Selenium

Original URL:https://www.guru99.com/find-element-selenium.html Find Element and Find Elements in Selenium Why do you need Find Element/s command? Interaction with a web page requires a user to l...

weixin_30853329的博客 212

sas协议(SAS PL-3)之Zoning功能

1 Zoning overview SAS zoning is implemented by a set of zoning expander devices with zoning enabled that define a zoned portion of a service delivery subsystem (ZPSDS)服务子系统. The zoning expander devices control whether a phy is permitted to participate in

sinat_37817094的博客 1532

YOLOv11改进 | 引入SFSConv空间频率选择卷积(含SFSC3k2二次创新),空间频率特征协同作用,检测性能全面提升

本文提出在YOLOv11中引入SFSConv空间频率选择卷积模块,通过显式分离和动态融合空间域与频率域特征,解决传统卷积对多尺度目标检测的局限性。SFSConv包含空间频率分离、动态权重融合和协同特征重建三个核心机制,并进一步创新提出SFSC3k2结构,通过双路频率分支增强特征协同作用。该改进显著提升了YOLOv11在遥感、医学等多尺度复杂场景下的检测性能,实验显示在微小目标检测任务中mAP提升5%-10%。代码实现展示了SFSConv模块的核心逻辑及其在PyTorch中的高效实现。

走向CTO的路上... 768

SeleniumWebDriver之FindElement和FindElements

为什么需要Find Element/s命令? 与Web页面的交互需要用户定位Web元素。FindElement命令用于唯一地标识页面中的(单个)Web元素。然而,FindElements命令用于唯一地标识页面中的Web元素列表。 有多种方法可以标识页面中的Web元素,比如ID, Name, Class Name, Link Text, Partial Link Text, Tag名称和XPath。...

软测小生 1万+

【OpenClaw从入门到精通】第45篇:Skill供应链安全——如何识别并避开恶意技能插件?(2026实测版)

随着OpenClaw生态爆发式增长,全球Skills总量近75万个,日均新增2.1万个,但恶意/问题插件已超600个,数十万用户受影响。本文基于奇安信威胁报告及360安全实践,拆解恶意技能的五大核心特征,提出"安装前三步法"安全审查流程,详解安全技能来源白名单与定期审计方案,并深度解析360龙虾Skill安全超市的分级认证机制。读者可掌握从技能筛选、安装审查到术后审计的全流程安全防护手段,通过实操命令与案例演示,零成本构建Skill供应链安全防线,避免遭遇私钥窃取、资产损失等安全事件。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 564

selenium 示例_Selenium findElement和findElements示例

selenium 示例Whenever you want to interact with a web page, we require a user to locate the web elements. We usually start by finding the HTML elements on the page whenever we plan to automate any web a...

从零开始的教程世界 4433

【保姆级教程】YOLOv8_OBB旋转目标检测:训练自己的数据集

【保姆级教程】YOLOv8_OBB旋转目标检测:训练自己的数据集

m0_51579041的博客 1万+

【100分】【等和子数组最小和】

逆序排序,这样能够使得在分组时优先选取较大的元素,以便将元素分配到较小的子集中,从而使得每个子集的和相对均衡。给定一个数组nums,将元素分为若干个组,使得每组和相等,求出满足条件的所有分组中,组内元素和的最小值。分成若干个组,使得每组的和相等,并求出满足条件的所有分组中,组内元素和的最小值。在递归的过程中,我们需要注意一个优化点,即避免将相同和的桶重复计算。4 个子集(5),(1,4),(2,3),(2,3)2 个子集(5, 1, 4),(2,3, 2,3)个子集,则返回子集和的最小值,如果不能,则将。

weixin_54707168的博客 1168

[selenium webdriver Java]元素定位——findElement/findElements

策略 语法 语法 描述 By id driver.findElement(By.id()) driver.findElements(By.id()) 通过id属性定位元素 By name driver.findElement(By.name()) driver.findElements(By.name()) 通过name属性定位元素 ...

vicky 4381

RockChip Android14 修改LCD背光最大值

在调试LCD屏时时长会出现硬件不匹配,导致电流过大,屏幕发热严重。在不调整硬件的情况下,我们可以通过修改软件,降低LCD背光最大值来实现适配。我们都知道LCD屏背光是靠pwm来控制,一般来说最大值可以设置为255,针对上述问题,我们可以通过软件来降低该值,比如200,100等等。

qq_34968572的博客 631

Selenium中findElement与findElements的核心差异与实战选型

WebElement定位是Web自动化测试的基础能力,其本质是浏览器DOM查询在WebDriver协议中的封装。理解findElement(强契约、单实例、异常驱动)与findElements(弱契约、集合返回、空安全)的语义分野,是规避NoSuchElementException和StaleElementReferenceException等高频异常的关键。二者在底层对应不同的HTTP WebDriver命令(/element vs /elements),影响等待策略、性能表现及风控敏感度。在动态渲染页面

weixin_33968104的博客 411

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

测试面试必备:Web自动化测试中findElement()和findElements()的区别

在Web自动化测试中,定位页面元素是最基础也是最重要的操作之一。Selenium WebDriver提供了两种主要的元素定位方法:`findElement()`和`findElements()`。本文将详细探讨这两种方法的区别,并通过Java代码示例和流程图帮助读者更好地理解它们的应用场景。

qq_58299462的博客 1088

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素。其中By类的常用定位方式共八种,现分别介绍如下

在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素。其中By类的常用定位方式共八种,现分别介绍如下。 1. By.name() 假设我们要测试的页面源码如下: button id="gbqfba" aria-label="Google Search" name="btnK" cl

breiofsd的博客 4341

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java+Selenium——findElements举例

findElements是用来查找一组元素,而findElement是用来查找匹配表达式的第一个元素。 这里用百度新闻某一个模块下新闻标题打印举例。 package rjcs; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.L...

小白龙白龙马的博客 455

Selenium常见面试题(一)

问题1) TestNG中使用的注释是什么? Ans:@Test,@ BeforeSuite,@ AfterSuite,@ BeforeTest,@ AfterTest,@ BeforeClass,@ AfterClass,@ BeforeMethod,@ AfterMethod。 问题2)你如何从excel读取数据?   1 2 3 4 5 ...

ProgrammerFan0101的博客 4703

软件测试面试题:findElements(By by); findElement(By by)的区别是什么?

findElements(By by); findElement(By by)的区别是什么?

一亿并发的博客 326
上一篇: 使用UIAutomatorViewer定位元素
下一篇: 检查移动Web应用程序的元素
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值