【问题标题】:Deriving Xpath for appium为appium派生Xpath
【发布时间】:2022-01-19 05:53:40
【问题描述】:

如何为以下突出显示的元素派生 xpath?因为我看到所有类名都是相同的。我也尝试过使用父子遍历,但它不起作用,因为所有 4 个子元素都具有相同的属性。我不能使用“Samsung - S10”文本,因为它是一个变量,并且会因相应的设备而改变。

【问题讨论】:

    标签: python css selenium xpath appium


    【解决方案1】:

    作为最后的手段,我总是使用 xpath 索引。我知道这不是最佳做法,但它总是对我有用。

    你可以试试:

    (//dd[@class='m-0 text-base'])[1]
    

    应该代表第一个节点,可以换成[2][3]分别定位第2个和第3个节点。

    另外,不确定您是否可以在 xpath 中使用 Device Protected,如果可以,那么我们必须使用它,并且我们可以消除 xpath 索引。

    【讨论】:

    • @Apratim Chaudhuri:SO 中的约定是通过单击答案旁边的勾号/复选标记将答案标记为已接受。
    【解决方案2】:

    我认为,对于您突出显示的文本,您可以使用以下xpath

    //div[@class='mb-3' and contains(@style, 'display: grid;')]//dl//dt[contains(text(), 'DEVICE PROTECTED')]/following-sibling::dd
    

    从那里,您可以将此 xpath 插入驱动程序,然后将元素放入列表中

    my_xpath = "//div[@class='mb-3' and contains(@style, 'display: grid;')]//dl//dt[contains(text(), 'DEVICE PROTECTED')]/following-sibling::dd"
    myElements = driver.find_elements(By.XPATH, my_xpath)
    

    获得元素列表后,您可以获取每个元素的 text 并随心所欲地使用它

    my_xpath = "//div[@class='mb-3' and contains(@style, 'display: grid;')]//dl//dt[contains(text(), 'DEVICE PROTECTED')]/following-sibling::dd"
    my_list_length = driver.find_elements(By.XPATH, my_xpath).__len__()
    
    for rec_num in range(my_list_length):
        newXPath = "{0}[{1}]".format(my_xpath, f'{rec_num + 1}')
        ourElement = driver.find_element(By.XPATH, newXPath)
        print(f'new element text: {ourElement.text}')
    

    如果只有 1 条记录显示并且您只需要设备名称,那么您也可以这样做:

    my_xpath = "//div[@class='mb-3' and contains(@style, 'display: grid;')]//dl//dt[contains(text(), 'DEVICE PROTECTED')]/following-sibling::dd"
    myText = driver.find_element(By.XPATH, my_xpath).text
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-05
      • 2017-08-22
      • 2015-08-27
      • 2019-06-09
      • 2019-06-02
      • 2016-01-19
      • 2016-08-14
      • 2023-01-13
      相关资源
      最近更新 更多