如何使用Selenium Java Webdriver搜索/查找所有结果

whlutmcx  于 2023-02-04  发布在  Java
关注(0)|答案(3)|浏览(164)

尊敬的Selenium WebdriverMaven:
我是这个框架的新手,需要一些关于如何定位/找到所有搜索结果的建议。下面是一个工作代码,它已经成功地找到了所有的属性使用Selenium Webdriver,但我不知道如何使用findElements(by ...)来获取这个网站返回的每一个结果:

WebDriver driver = new FirefoxDriver();

    driver.get("http://www.domain.com.au/?mode=buy");

    // Enter the query string "3000"        
    WebElement query = driver.findElement(By.xpath(".//*[@id='ctl00_SearchMoreCriteria_Radar_searchToBuy']"));        
    query.sendKeys("3000");        

    WebElement searchButton = driver.findElement(By.xpath(".//*[@id='ctl00_SearchMoreCriteria_Radar_Search']")); 
    searchButton.click();  

    // Sleep until the div we want is visible or 5 seconds is over        
    long end = System.currentTimeMillis() + 5000;

有谁能对这个查询提供一些建议吗?我还喜欢在定位/查找所有返回结果之前包含一个暂停机制?
非常感谢,
杰克
非常感谢Santoshsarma的回应,但我很难将您的建议应用到以下返回的Web查询页面输出片段:

<h3>
        <a id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_hypAddress" href="/Property/For-Sale/Penthouse/VIC/Melbourne/?adid=2009775619">602/73 Flinders Lane, Melbourne</a></h3>
     <dl class="cN-featDetails">
        <dt class="proptype">Property type</dt>
        <dd id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_ddPropertyType" class="propertytype type-house" title="Property type: House">House</dd>
        <dt class="bedrooms">Bedrooms</dt>
        <dd id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_ddBedrooms" class="bedrooms" title="Bedrooms">3</dd>
        <dt class="bathrooms">Bathrooms</dt>
        <dd id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_ddBathrooms" class="bathrooms" title="Bathrooms">4</dd>
        <dt class="carspaces">Car spaces</dt>
        <dd id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_ddCarSpaces" class="carspaces" title="Car spaces">2</dd>
    </dl>
</div>
<div class="main-wrap">
    <ul class="photo cfix">
        <li>
            <a id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_hypMainThumb" tabindex="-1" class="contain" href="/Property/For-Sale/Penthouse/VIC/Melbourne/?adid=2009775619"><img id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_imgMainThumb" title="602/73 Flinders Lane, Melbourne" src="http://images.domain.com.au/img/2012625/18127/2009775619_1_PM.JPG?mod=120925-150000" alt="Main photo of 602/73 Flinders Lane, Melbourne - More Details" style="border-width:0px;" /></a>
        </li>

        <li class="last">
            <a id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_hypSecondThumb" tabindex="-1" class="contain" href="/Property/For-Sale/Penthouse/VIC/Melbourne/?adid=2009775619"><img id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_imgSecondThumb" title="602/73 Flinders Lane, Melbourne" src="http://images.domain.com.au/img/2012625/18127/2009775619_2_PM.JPG?mod=120913-125823" alt="Photo of 602/73 Flinders Lane, Melbourne - More Details" style="border-width:0px;" /></a>
        </li>
    </ul>

列出所有搜索结果=驱动程序.查找元素(按. id("ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_hypAddress"));
ctl01中有一个索引需要循环才能获得所有搜索结果,这会很慢,因为存在其他类似的威胁。()来只搜索其子元素,但我不知道在哪里可以找到根。您能否确认此方法是否有效&也许针点从下面的URL查询结果页面的结果列表的根:http://www.domain.com.au/Search/buy/Property/Types/Apartment-Unit-Flat/Duplex/House/New-Apartments-Off-the-Plan/New-Home-Designs/New-House-Land/Penthouse/Semi-Detached/Studio/Terrace/Townhouse/Villa/State/VIC/Area/Inner-City/Region/Melbourne-Region/Suburb/Melbourne/?bedrooms=1&bathrooms=1&carspaces=1&from=450000&searchterm=3000&pois=PriSchl|1|2|2000
我在这方面缺乏经验,如能耐心等待,将不胜感激。

kt06eoxx

kt06eoxx1#

findElements方法将返回具有相同定位符的WebElements列表。

> List<WebElement> AllSearchResults=driver.findElements(By.id("value"));

在循环中运行上面的list以获得每个单独的搜索结果。

for(WebElement eachResult:AllSearchResults)
   {
           eachResult.click(); 
   }
ymdaylpp

ymdaylpp2#

如果此问题仍未解决,请尝试执行以下操作来查找h3链接

(new WebDriverWait(driver, 10)).until(ExpectedConditions
   .visibilityOfElementLocated(
   By.id("ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_hypAddress")));

此代码等待给定元素10秒,然后引发TimeOutException。
问候你克里斯蒂安

z9zf31ra

z9zf31ra3#

也许我们可以解决它的帮助下,一个自定义的xpath使用ID属性。
代码如下所示:

List AllSearchResults=driver.findElements(By.xpath("//*[contains(@id='SrchResLst_rptResult')]"));

或者像这样:

List AllSearchResults=driver.findElements(By.xpath("//*[contains(@id='ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_')]"));

这里我们使用 * 是因为某些搜索结果具有标签<a><dd>的组合
xpath搜索包含"SrchResLst_rptResult"字符串作为ID属性值的所有元素。

相关问题