简体   繁体   English

如何检查元素中是否有多个具有相同类名且没有资源标识的元素

[英]How to inspect element if there are multiple elements with same class name and doesn't have resource-id

 <?xml version="1.0" encoding="UTF-8" standalone="true"?> -<hierarchy rotation="0"> -<node bounds="[0,0][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.widget.FrameLayout" resource-id="" text="" index="0"> -<node bounds="[0,0][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.widget.LinearLayout" resource-id="" text="" index="0"> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.widget.FrameLayout" resource-id="android:id/content" text="" index="0"> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.webkit.WebView" resource-id="" text="" index="0"> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="true" focused="true" focusable="true" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.webkit.WebView" resource-id="" text="Ionic App" index="0"> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> <node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"/> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="1"> -<node bounds="[0,42][720,1280]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> -<node bounds="[0,42][720,80]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> <node bounds="[631,42][720,80]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="true" enabled="true" clickable="true" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.widget.Button" resource-id="" text="V 3.5" index="0"/> </node> <node bounds="[190,105][530,229]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.widget.Image" resource-id="" text="Himalaya Image" index="1"/> <node bounds="[288,262][432,369]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.widget.Image" resource-id="" text="Leap Image" index="2"/> -<node bounds="[35,483][687,628]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="3"> -<node bounds="[131,483][589,565]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> -<node bounds="[131,483][589,565]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> -<node bounds="[131,483][589,563]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> -<node bounds="[131,483][589,563]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="0"> <node bounds="[145,504][575,539]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="true" enabled="true" clickable="true" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.widget.EditText" resource-id="" text="" index="0" NAF="true"/> <node bounds="[131,483][589,565]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="true" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="1" NAF="true"/> </node> </node> </node> </node> -<node bounds="[35,596][687,628]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="1"> <node bounds="[224,602][390,628]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="true" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="Register" index="0"/> <node bounds="[388,596][397,628]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text=" " index="1"/> <node bounds="[393,602][497,628]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="true" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="Forgot PIN" index="2"/> </node> </node> <node bounds="[101,745][619,1106]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.widget.Image" resource-id="" text="Lead 2020" index="4"/> </node> </node> </node> </node> </node> </node> <node bounds="[0,42][720,45]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="" text="" index="1"/> </node> </node> </node> </node> </node> </node> <node bounds="[0,0][720,42]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.talentpace.substk" class="android.view.View" resource-id="android:id/statusBarBackground" text="" index="1"/> </node> </hierarchy> 

Inspected Element. 被检查的元素。 Tried finding element in code by various ways. 尝试通过各种方式在代码中查找元素。 But nothing is working. 但是没有任何效果。 Please suggest what should be the xpath for editing the PIN number in app 请建议在应用中编辑PIN码的xpath应该是什么

  1. android.view.view class has multiple elements, resource id and text is null. android.view.view类具有多个元素,资源ID和文本为null。
  2. Only 1 element with class android.widget.editText. 类别为android.widget.editText的元素只有1个。 But that also doesnt work. 但这也不起作用。

Attached the tree which i am trying to write the code for 附加了我正在尝试为其编写代码的树

UIAutomatorTree UIAutomatorTree

Below is the xpath which i tried 以下是我尝试过的xpath

driver.findElementByXPath("//android.widget.FrameLayout//android.view.View[@index='3']//android.widget.EditText") driver.findElementByXPath( “// // android.widget.FrameLayout android.view.View [@指数= '3'] // android.widget.EditText”)

That's not answering the question but may help if you have access to the source code. 这不能回答问题,但是如果您可以访问源代码,则可能会有所帮助。 setContentDescription method helps to deal with such problems, it has to be defined in XML which helps not only with accessibility but also during any UI testing. setContentDescription方法有助于解决此类问题,它必须以XML进行定义,这不仅对可访问性有帮助,而且在进行任何UI测试期间也都具有帮助。 Even when you have an ID/text it may be a situation when multiple views have similar text and/or ids 即使您具有ID /文本,也可能是多个视图具有相似的文本和/或ID的情况

In your case - dividing elements in the XPath should be done with one slash "/" Here is an example 在您的情况下-XPath中的元素分隔应使用一个斜杠“ /”来完成,这是一个示例

driver.findElement(By.xpath("//android.widget.FrameLayout[1]/android.view.View[3]/android.widget.EditText[0]"));

In your XPath expression, you are trying to get all <android.widget.FrameLayout[1]> elements. 在您的XPath表达式中,您尝试获取所有<android.widget.FrameLayout[1]>元素。 Looking to your xml, the only elements your document has is one <hierarchy> and multiple <node> elements. 查看xml,文档中仅有的元素是一个<hierarchy>和多个<node>元素。 That's why you don't get any results. 这就是为什么您没有得到任何结果的原因。

Assuming you are coding in C#, try something like this: 假设您使用C#进行编码,请尝试如下操作:

driver.findElementByXPath(@"//node[@class = ""android.widget.EditText""]));
  • With the @ you tell the compiler to use string literals, so you don't need to escape characters. 使用@可以告诉编译器使用字符串文字,因此您无需转义字符。
  • //node returns all the <node> elements in the current xml document. //node返回当前xml文档中的所有<node>元素。
  • [@class = ""android.widget.EditText""] tells your XPath expression you need elements with a class attribute with a value that equals "android.widget.EditText". [@class = ""android.widget.EditText""]告诉您的XPath表达式,您需要具有类属性且其值等于“ android.widget.EditText”的元素。
  • The double quotation is needed so Visual Studio recognises "android.widget.EditText" as a string value. 需要双引号,以便Visual Studio将“ android.widget.EditText”识别为字符串值。

Note that using // isn't a very efficient way of querying the xml. 请注意,使用//不是查询xml的非常有效的方法。 Always try to avoid it and narrow you XPath expression. 始终尝试避免它并使XPath表达式变窄。 A nice XPath examples list \\ cheat sheet from Microsoft here . Microsoft提供一个很好的XPath示例列表\\备忘单。 It should help you accomplish this. 它应该可以帮助您完成此任务。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何更改应用程序ID但保留相同的资源ID? - How to change app-id but keep the same resource-id? [android][appium] 如何点击没有资源id的元素? - [android][appium] how to click on element with no resource-id? UIautomatorviewer.bat中没有resource-id元素 - No resource-id element in UIautomatorviewer.bat 如何单击Android UI上没有资源ID或python脚本中的任何名称的元素 - How to click on an element on Android UI which doesn't have resource ID or any name in python script 如何在 react-native 中将 resource-id 添加到 android - How to add resource-id to android in react-native 在 Android 中,使用 Webdriverio,如何通过资源 ID 选择元素? - in Android, Using Webdriverio, How select elment by resource-id? Android:了解R.java中的resource-id - Android: Understand resource-id in R.java 在Android Studio中获取具有相同名称类jsoup的下一个元素 - get next element that have same name class jsoup in android studio 我们可以通过使用resource-id / ID uisng appium来进行ios webview应用自动化吗 - can we do ios webview app automation by using resource-id/ID uisng appium 为 FragmentDirections 生成的文件没有相同的包名称 - Generated file for FragmentDirections doesn't have the same package name
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM