提问者:小点点

从没有Xpath的孩子获取父项目


我的应用程序屏幕上有一个设备列表。代表唯一设备的每个webelement都有2个子设备:

  • (唯一)设备名称
  • 开/关状态

父设备具有相同的id,因此选择正确设备的方法是通过子设备并检查device_name. text是否是我想要的名称。

我正在尝试编写一个函数来评估特定设备名称的关闭状态,而不使用xpath

def check_on_off_status(device_name:WebElement):
   device = device_name.find_element_by_xpath('..') # we find the parent from device_name, and navigate from there
   # power_status_element =  get_child(device,power_status_id)
   # return power_status_element.enabled

但是我在计算xpath表达式时遇到了异常。如果我只有元素,我如何获得父节点?

编辑:

父级(设备)Xpath

/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout /android.widget.FrameLayout/android.widget.LinearLayout /android.widget.FrameLayout/android.view.ViewGroup /androidx.viewpager.widget.ViewPager /androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout /android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView /android.view.ViewGroup[1]/android. widget.Frame Layout /android.view.ViewGroup/android.view.ViewGroup

设备名称Xpath: /hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/androidx.viewpager.widget.ViewPager/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup[1]/android. widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.widget.TextView[1]

开/关图标(设备名称同级)Xpath:

/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/androidx.viewpager.widget.ViewPager/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup[1]/android. widget.Frame Layout/android.view.View Group/android.view.View Group/android.widget.Image View


共1个答案

匿名用户

你已经很接近了。你只需要在xpath中附加./字符,这样就可以相对于WebElementdevice_name引用,如下所示:

device = device_name.find_element_by_xpath('./..')