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

时间:2015-10-22 08:48:29

标签: selenium xpath webdriver

首先感谢你的时间。

我正在尝试使用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">

2 个答案:

答案 0 :(得分:1)

C#例如点击链接:

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

在XPath中执行此操作:

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

答案 1 :(得分:0)

我会写一个像:

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

无需编写整个ID;

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

我一直回避使用//*,因为它搜索绝对一切。根据您的网络应用程序的大小,如果您知道自己正在访问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();

请告诉我这是否适合您。