Selenium 查找Webdriver 2 Java中元素的XPath相关问题

Selenium 查找Webdriver 2 Java中元素的XPath相关问题,selenium,selenium-webdriver,Selenium,Selenium Webdriver,尊敬的Selenium Webdriver 2专家: 我是这个框架的新手,需要您就以下网页XHTML片段中的一些XPath相关问题提供建议: <dl class="cN-featDetails"> <dt class="propertytype">Property type</dt> <!-- line 3 --> <dd id="ctl00_ctl00_Content_Content_SrchResLs

尊敬的Selenium Webdriver 2专家:

我是这个框架的新手,需要您就以下网页XHTML片段中的一些XPath相关问题提供建议:

   <dl class="cN-featDetails">
        <dt class="propertytype">Property type</dt>
        <!-- line 3 --> <dd id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_ddPropertyType" class="propertytype type-house" title="Property type: House">House</dd>
       <!-- line 3a --> <!-- or  class="propertytype type-townhouse"--->
        .......
<div class="main-wrap">
    <div class="s-prodDetails">
        <a id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_hypMainThumb" class="photo contain" href="/Property/For-Sale/House/LA/St Gabriel/?adid=2009938763">img id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_imgMainThumb" title="44 Crown Street, St Gabriel" src="http://images.abc.com/img/2012814/2778/2009938763_1_PM.JPG?mod=121010-210000" alt="Main photo of 44 Crown Street, St Gabriel - More Details" style="border-width:0px;" /></a>
        <div class="description">
             <h4><span id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_lblPrice">Offers Over $900,000 </span></h4>
             <h5>SOLD BY WAISE YUSOFZAI</h5><p>CHARACTER FAMILY HOME... Filled with warmth and charm, is a very well maintained family home in a quiet level street. Be...</p>
    </div>                                                                                                                                                                                                                                                                                                                        
    <a id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_hypMoreDetails" class="button" href="/Property/For-Sale/House/LA/St Gabriel/?adid=2009938763">More Details</a>
    <dl id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_dlAgent" class="agent">
        <!-- line 19 --> <dt>Advertiser</dt>
        <!-- line 20 --> <dd class="contain">                                       
        <!-- line 20a --> <!-- or class="" -->
            <img id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_imgAgencyLogo" title="Carmen Jones Realty" src="http://images.abc.com/img/Agencys/2778/searchlogo_2778.GIF" style="border-width:0px;" />                                                                                                                                                                                                                                                     
        </dd>
    </dl>
</div>
b是否有一种简单的方法通过合并布尔运算符和正则表达式作为findElement或findElement的一部分来验证其中任何一个元素的存在?这将大大降低成本 查找的数量以及简化搜索

c按标记名搜索元素时是否可以使用XPath语法。e、 g.driver.findElementBy.tagName/div[@class='report']/result

d是否可以在XPath搜索中使用正则表达式,例如第20-20a行的driver.findElementBy.XPath//div[@class='main-wrap']/dl[@class='agent']/dd[@class=或@class='contain']等

e如何引用紧跟其后的节点?e、 g.假设当前节点是第19行的广告客户,如何查找其标题,其类名在何处 可以具有包含或不包含的值。第18行中可能有多个标签

我以前在XML文档上使用过XPath,但希望扩展在Webdriver 2中定位元素的能力

任何帮助都是非常大的

非常感谢

Jack

a&d:可以使用| XPath在同一个表达式中指定两个备用路径

c:不能在byTagName中使用XPath,但可以//查找给定节点的任何后代

e:您可以使用like parent和following sibling来选择相对于给定节点的所有节点

我希望这些指针是有用的。我还推荐优秀的XPath作为如何构造XPath的参考。

a&d:您可以使用| XPath在同一表达式中指定两个备用路径

c:不能在byTagName中使用XPath,但可以//查找给定节点的任何后代

e:您可以使用like parent和following sibling来选择相对于给定节点的所有节点


我希望这些指针是有用的。我还推荐优秀的作为如何构建XPath的参考。

考虑到Zarkonnen给出的答案,我要补充一点

此方法用于验证页面上是否存在元素

您还可以使用isDisplayed方法,该方法可以与isElement成对工作:

driver.findElement(By locator).isDisplayed()
返回到您的来源: 假设我们想验证页面上是否存在“更多详细信息”链接。

并始终尝试验证在firepath中找到的web元素的定位器

通过这种方式,您可以自动获取elment的xPath。请参阅附加的屏幕。
考虑到Zarkonnen给出的答案,我想补充一点

此方法用于验证页面上是否存在元素

您还可以使用isDisplayed方法,该方法可以与isElement成对工作:

driver.findElement(By locator).isDisplayed()
返回到您的来源: 假设我们想验证页面上是否存在“更多详细信息”链接。

并始终尝试验证在firepath中找到的web元素的定位器

通过这种方式,您可以自动获取elment的xPath。请参阅附加的屏幕。

Hi Eugene,isElementPresent方法参数中的选择器和Java类型是什么?您是否能够使用前面发布的XHTML页面提供一个示例?再次感谢您,Jack h无法使用以下语句找到下一个同级:agency.findElementBy.xpath//div[@class='main-wrap'/dl[@class='agent']/dt[containstext,'Advertiser']/following sibling::*[1][name='dd']/img[1].getAttributetitle;使用下面的行代替广告商:agency.findElementBy.xpath//div[@class='main-wrap'/dl[@class='agent']/dt[containstext,'Advertiser']/../dd/img[1]。getAttributetitle;是前面的语句,它有以下同级:*[1][name='dd']Selenium WebDriver 2 Java支持?不确定,因为我需要完整的HTML dom模型表示来验证。我将向您解释如何自动生成所选web元素的xpath并将其用于您的目的。还要检查此链接。好的xpath css选择器手册希望它对您有用。Hi Eugene,选择器是什么isElementPresent方法参数中By的Java类型?您能够使用前面发布的XHTML页面提供示例吗?再次感谢您,Jack h无法使用以下语句找到下一个同级:agency.findElementBy.xpath//div[@class='main-wrap'/dl[@class='agent']/dt[containstext,'Advertiser']/以下兄弟姐妹::*[1][name='dd']/img[1]。getAttributetitle;使用下面的行代替广告商:agency.findElementBy.xpath//div[@class='main-wrap'/dl[@class='agent']]/dt[containstext,'Advertiser']/../dd/img[1]。getAttr
伊布泰特;前一个语句是否具有以下同级::*[1][name='dd']由Selenium WebDriver 2 Java提供支持?当然,不确定,因为我需要整个HTML dom模型表示来验证。我将向您解释如何自动生成所选web元素的xpath,并将其用于您的目的。好的XPathCSS选择器手册希望对您有用。xpath是否有内置的计数方法来记录找到的元素数?Selenium WebDriver 2是否自带调试器?我将Netbeans 7.2与许多WebDriver插件一起使用,但找不到任何调试功能。可以在Java逐行级别上使用Netbeans调试器,尽管我正在WebDriver中寻找某种XPath Explorer类型的功能来控制目标XHTML查询结果页上的导航。如果您可以使用findElementsBy.XPath…blablablabla,它将返回webElemebt大小的数组,您可以使用IDEA计算其大小。我使用内部IDE功能进行调试。为了验证您是否正确定位了元素,请使用firefox中的firepath firebug插件。感谢eugene.polschikov和Zarkonnen的所有建议,并能够使用Selenium Webdriver 2 Java中的XPath从查询结果页面检索所有必要的数据。XPath是否有内置的计数方法来记录找到的元素数?Selenium WebDriver 2是否自带调试器?我将Netbeans 7.2与许多WebDriver插件一起使用,但找不到任何调试功能。可以在Java逐行级别上使用Netbeans调试器,尽管我正在WebDriver中寻找某种XPath Explorer类型的功能来控制目标XHTML查询结果页上的导航。如果您可以使用findElementsBy.XPath…blablablabla,它将返回webElemebt大小的数组,您可以使用IDEA计算其大小。我使用内部IDE功能进行调试。为了验证您是否正确定位了元素,请使用firefox中的firepath firebug插件。感谢eugene.polschikov和Zarkonnen的所有建议,并能够使用Selenium Webdriver 2 Java中的XPath从查询结果页面检索所有必要的数据。
driver.findElement(By locator).isDisplayed()
String cssMoreDetails = "a[id='ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_hypMoreDetails']";
//and you simply call the described above method
isElementPresent(By.cssSelector(cssMoreDetails));
//if you found xPath then it be
isElementPresent(By.xpath("//*..."));