【问题标题】:How to get the last element of a horizontal bar in Appium-Java?如何在 Appium-Java 中获取水平条的最后一个元素?
【发布时间】:2019-02-22 22:20:18
【问题描述】:

我是 appium 的新手,我只是在这个特定的地方停留了这么久,并且没有任何解决方案对我有用。即使是在正确的方向上轻轻一点也将不胜感激。

我正在尝试自动化一个如下所示的应用程序。

我想遍历第一个水平横幅(例如:-最近添加的电视)。播放该横幅中的所有视频,然后以同样的方式继续第二个横幅(最近添加的电影)。

我发现查找这些元素的定位器有问题。以下是 Android 应用程序的结构。

<Android App>    
      <First Horizontal Tab-Recently Added TV>
      [resource-id="A",class="B",index=0]
                    <Child Element-Video File>
                          [resource-id="A",class="B",index=0]
                    <Child Element-Video File>
                          [resource-id="A",class="B",index=1]
                    <Child Element-Video File>
                          [resource-id="A",class="B",index=2]  
                    <Child Element-Video File>
                          [resource-id="A",class="B",index=3]          

      <First Horizontal Tab-Recently Added Movies>
      [resource-id="A",class="B",index=0]

                    <Child Element-Video File>
                          [resource-id="A",class="B",index=0]
                    <Child Element-Video File>
                          [resource-id="A",class="B",index=1]
                    <Child Element-Video File>
                          [resource-id="A",class="B",index=2]  
                    <Child Element-Video File>
                          [resource-id="A",class="B",index=3]  

除了标题之外,两个水平条都具有相同的参数。子元素在滑动条之间具有共同的参数。

我想获取第一个滑块中的视频总数,滚动它并获取该行中的视频数直到结束。然后开始从主页一个接一个地播放视频。

但是我得到了双重计数,因为这两个栏都有元素的所有通用名称。

请告诉我如何获得所需的结果,或者是否有可能这样做。

【问题讨论】:

    标签: java selenium selenium-webdriver appium appium-android


    【解决方案1】:

    您可以尝试使用xpath 定位器来获取所有视频文件。

    也许UIAutomatorViewer 也有帮助。它显示了所有不同类型的定位器,您可以保存底层 XML。使用 XMLSpy 或其他在线工具等工具,您可以测试您的 xpath 定位器。

    记得在使用 UIAutomatorViewer 之前停止 appium 服务器,否则它不会工作。

    【讨论】:

    • @AndiCover..谢谢你的帮助。我正在使用 UIAutomator2 并使用 xpath 来获取元素定位器。但在这种特殊情况下,元素没有唯一性。所以它给出了所有的列表所有水平条中的视频文件。Appium 检查器也无法获取任何有效的 xpath。
    • //driver.findElement(By.xpath("//android.support.v7.widget.RecyclerView[@resource-id='com.nova:id/horizontal_recycler' and @index='1']")); 上面的 xpath 对我有用,但也给了我第二个滑块的元素,因为它们都有相同的资源 ID 和索引号和类。
    • 我可以使用从 appium 检查器获得的 xpath 来定位元素。xpath 是这样的; driver.findElement(By.xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.support.v4.widget.DrawerLayout/android.widget.RelativeLayout/android.support.v4.view.ViewPager/android.widget.RelativeLayout/android.widget.ScrollView/android.widget.RelativeLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout[1]/android.support.v7.widget.RecyclerView"))
    • 为什么不遍历所有元素呢? for(WebElement element : driver.findElements(By.xpath("YOUR_LOCATOR"))){
    • 谢谢。我一定会试试这个。同时我尝试这个来获取子元素。 By.xpath("//*android.widget.LinearLayout[@index='0']/child::*") 考虑将 "/*android.widget.LinearLayout[@index='0']/" 作为父栏的 xpath,但无法获取子元素。
    猜你喜欢
    • 2020-03-28
    • 2012-01-11
    • 2017-02-13
    • 2021-09-28
    • 2020-04-06
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多