Selenium如何点击这种链接

时间:2016-04-15 22:51:41

标签: java selenium selenium-webdriver

我遇到了这个特定链接的问题,因为它是动态的,它没有一个specefic名称或id,但我知道所有这些链接都在一个带有类的span中。我试图得到一个WebElements列表,以获得所有跨越“更多”类的内容,以获得一堆链接,但我得到这个错误:

 org.openqa.selenium.WebDriverException: Element is not clickable at point (96, 21). Other element would receive the click: <div class="priceFinderHeaderLogoWrap"></div>

html代码看起来如何:

 <span class="more">
  <a onclick="setPID(27272);ta.fireEvent('hotels_lists_engagement_tracking.fired', {type: 'ReviewCount', element: this});ta.setEvtCookie('Reviews', 'ReviewCount', '1461750', 1, '/Hotel_Review');" target="_blank" href="/Hotel_Review-g150800-d1461750-Reviews-City_Express_Plus_Reforma_El_Angel-Mexico_City_Central_Mexico_and_Gulf_Coast.html#REVIEWS">254 opiniones</a></span>

我的java代码:

List<WebElement> links = driver.findElements(By.className("more"));
System.out.println(links.isEmpty());

for (int i = 0; i < links.size(); i++)  {
    links.get(i).click();
    // do something in the web page...
}

2 个答案:

答案 0 :(得分:1)

试试这个

List<WebElement>  links = driver.findElements(By.XPath("//span[@class='more']/a"));

答案 1 :(得分:1)

根据提供的信息,链接是动态的,内部跨度与类更多。所以在您尝试的代码中

   List<WebElement> links = driver.findElements(By.className("more"));

要求加载所有跨度的mebelements但实际上你需要链接吗?

因此,如果您需要在课程中加载特定范围内的所有链接,请尝试以下

  List<WebElement> links = driver.findElements(By.xpath("//span[@class='more']/a"));

前提是该页面包含您尝试获取链接的唯一范围。然后选择&#39; for&#39;循环并单击链接。

如果仍然遇到同样的问题,请使用Actions点击元素。例如下面的

    for(int i=0; i<links.size(); i++){

        new Actions(driver).moveToElement(links.get(i)).click().build().perform();
    }

如果您打算按照您尝试的代码点击跨度,请尝试按上述操作退出例外。

请注意,当您执行点击时可能会出现stealelement异常,这可能导致页面加载并且驱动程序在for循环中放松了对收集的webelements的引用。

谢谢你, 穆拉利