包含非唯一嵌套元素的元素的 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 && 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 的元素,您可以使用以下任一方法 :
使用Java和xpath
:
driver.findElement(By.xpath("//label[contains(., 'Is Registered User')]//following::div[./span[contains(@ng-class, 'answerCode')]]")).click();
使用Python和XPATH
:
driver.find_element(By.XPATH, "//label[contains(., 'Is Registered User')]//following::div[./span[contains(@ng-class, 'answerCode')]]").click()
理想情况下,单击需要为 引入 WebDriverWait 的元素,您可以使用以下任一方法以下 :
使用Java和xpath
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[contains(., 'Is Registered User')]//following::div[./span[contains(@ng-class, 'answerCode')]]"))).click();
使用Python和XPATH
:
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")]]
这里我们获取问题的父级,然后返回答案
想知道是否有人可以帮我找到页面上以下元素的 xpath
我正在为以下问题创建一个测试 - 我已经能够找到 Q1 is registered user 部分的 xpath,但我想找到一个选择 is reigstered user 以及 Yes 答案的 xpath
下面是元素
的HTML<div ng-show="resultsVm.eligibilityResults.questionAnswerPairs.length && 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 的元素,您可以使用以下任一方法
使用Java和
xpath
:driver.findElement(By.xpath("//label[contains(., 'Is Registered User')]//following::div[./span[contains(@ng-class, 'answerCode')]]")).click();
使用Python和
XPATH
:driver.find_element(By.XPATH, "//label[contains(., 'Is Registered User')]//following::div[./span[contains(@ng-class, 'answerCode')]]").click()
理想情况下,单击需要为
使用Java和
xpath
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[contains(., 'Is Registered User')]//following::div[./span[contains(@ng-class, 'answerCode')]]"))).click();
使用Python和
XPATH
: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")]]