包含非唯一嵌套元素的元素的 XPath

XPath for element which contains non unique nested element

想知道是否有人可以帮我找到页面上以下元素的 xpath

我正在为以下问题创建一个测试 - 我已经能够找到 Q1 is registered user 部分的 xpath,但我想找到一个选择 is reigstered user 以及 Yes 答案的 xpath

下面是元素

的HTML
<div ng-show="resultsVm.eligibilityResults.questionAnswerPairs.length &amp;&amp; doesBusinessExist" class="row show-grid" ng-repeat="eligibilityResult in resultsVm.eligibilityResults.questionAnswerPairs">
        <div class="col-md-8">
            <label>
                Q1. Is Registered User?
            </label>
        </div>
        <div class="col-md-2">
            <span class="glyphicon glyphicon-ok" ng-class="{
              'glyphicon-ok' : (eligibilityResult.answer.answerCode == 'Y')
              , 'glyphicon-remove' : (eligibilityResult.answer.answerCode == 'N')
              , 'glyphicon-flag' : (eligibilityResult.answer.answerCode == 'O')
              }" aria-hidden="true"></span>  Yes
        </div>
    </div>

要单击文本为 Yes 的元素,您可以使用以下任一方法 :

  • 使用Javaxpath:

    driver.findElement(By.xpath("//label[contains(., 'Is Registered User')]//following::div[./span[contains(@ng-class, 'answerCode')]]")).click();
    
  • 使用PythonXPATH:

    driver.find_element(By.XPATH, "//label[contains(., 'Is Registered User')]//following::div[./span[contains(@ng-class, 'answerCode')]]").click()
    

理想情况下,单击需要为 引入 WebDriverWait 的元素,您可以使用以下任一方法以下 :

  • 使用Javaxpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[contains(., 'Is Registered User')]//following::div[./span[contains(@ng-class, 'answerCode')]]"))).click();
    
  • 使用PythonXPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[contains(., 'Is Registered User')]//following::div[./span[contains(@ng-class, 'answerCode')]]"))).click()
    
  • 注意:对于Python 客户端,您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

使用以下 xpath:

获取问题:

//label[contains(text(),"Q1. Is Registered User?")]

获取特定问题的答案:

//label[contains(text(),"User")]/ancestor::div[@class="row show-grid"]//*[text()[contains(.,"Yes") or contains(.,"No")]]

这里我们获取问题的父级,然后返回答案