Selenium Web Driver - 如何使用 xpath 缩小搜索范围? //* 是不够的

Selenium Web Driver - How to narrow down my search using xpath? //* is not sufficient

首先感谢您的宝贵时间。

我正在尝试使用 selenium 在我的网络应用程序的列表框中查找条目

driver.findElement(By.xpath("//*[text()='" + title + "']")).click();

我将如何修改我的代码以停止搜索所有内容并搜索以下内容:(我的列表框中的 myXpath 输出来自 firebug/firepath)

<div id="ctl00_ctl00_MainContentPlaceHolder_MainContentPlaceHolderSurvey_upSurveysList">

再次感谢,您能否也尽可能详细地解释您的答案,我正在努力学习这个,因为我以后会非常需要它

<div id="ctl00_ctl00_MainContentPlaceHolder_MainContentPlaceHolderSurvey_upSurveysList">
Displaying 1-10 of 47 Records
<div class="ListBox">
<div class="divListItem">
<a id="ctl00_ctl00_MainContentPlaceHolder_MainContentPlaceHolderSurvey_lvSurveys_ctrl0_ctl00_btnApplicationID" class="manCensoredName" href="javascript:__doPostBack('ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolderSurvey$lvSurveys$ctrl0$ctl00$btnApplicationID','')">11</a>
</div>
<div class="divListItem">
<div class="divListItem">
<div class="divListItem">
<div class="divListItem">
<div class="divListItem">
<div class="divListItem">
<div class="divListItem">
<div class="divListItem">
<div class="divListItem">

点击link的C#例子:

driver.FindElement(By.Id("ctl00_ctl00_MainContentPlaceHolder_MainContentPlaceHolderSurvey_upSurveysList")).Click();

在 XPath 中完成:

driver.FindElement(By.XPath("//*[@id='ctl00_ctl00_MainContentPlaceHolder_MainContentPlaceHolderSurvey_upSurveysList']")).Click();

我会这样写:

driver.findElement(By.xpath("//div[contains(@id,'upSurveysList')].click();

不用写完整id;

使用选择 xpaths 的 "contains" 方法,您可以从 div 中取出任何部分文本来匹配它(只要该文本没有出现在 html,但在你的情况下,我认为不会)。

我总是回避使用 //*,因为它会搜索所有内容。根据您的 Web 应用程序的大小,如果您知道您正在访问 divcanvasimg,您可以减少测试时间并提高 xpath 准确性和可维护性。

此外,我个人知道,我的网络应用程序非常挑剔,使用 ActionsWebElement 是点击我的大部分按钮的唯一方法。

例如:

WebElement mybutton = driver.findElement(By.xpath("//div[contains(@id,'upSurveysList')].click();
Actions actions = new Actions(driver);
actions.moveToElement(mybutton).build().perform();
mybutton.click();

让我知道这是否适合你。