如何使用硒点击网页上的广告等动态链接

时间:2018-08-29 16:20:57

标签: selenium-webdriver

我是Selenium webdriver的新手,正在尝试测试包含一些动态链接(动态广告)的网页。范例:https://mail.rediff.com/cgi-bin/login.cgi

上的广告

我尝试使用xpath,classname和id进行操作,但这些都不起作用。这是因为每次页面上显示新内容时,它都无法找到该元素并在线程“ main”中引发Exception: / p>

org.openqa.selenium.NoSuchElementException: Unable to locate element: #map.

我的代码是:

package Selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;

public class Image_Link {

    static WebDriver driver ;
    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub


        //System.setProperty("webdriver.chrome.driver", "E://chromedriver_win32//chromedriver.exe");
        //driver = new ChromeDriver();
        System.setProperty("webdriver.gecko.driver", "E://geckodriver-v0.21.0-win64//geckodriver.exe");
        driver = new FirefoxDriver();
        Actions actions = new Actions(driver);
        driver.get("https://mail.rediff.com/cgi-bin/login.cgi");
        //WebElement Dynamic_ads=driver.findElement(By.className("rhs-area floatR"));
        WebElement Dynamic_ads=driver.findElement(By.id("map"));
        actions.moveToElement(Dynamic_ads).perform();
        WebElement ad_Link = driver.findElement(By.cssSelector("#map > area:nth-child(2)"));
        actions.moveToElement(ad_Link);
        actions.click();
        actions.perform();

        //driver.navigate().to("www.google.com");

        //String value = driver.findElement(By.id("hplogo")).getAttribute("title");


    }

}

1 个答案:

答案 0 :(得分:0)

找不到动态广告的元素,因为它尚未在加载页面上完全加载。我建议为您要查找的特定添加添加明确的等待时间。您可以在此处查看此{{3}}以获得更多信息。

无论如何,这是您的解决方案:

1。)实施WebDriverWait:WebDriverWait wait = new WebDriverWait(driver, 20);

2。)将Dynamic_ads数据更改为wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("map")));,然后再进行Dynamic_ads.click();

OR

2。)将Dynamic_ads数据更改为wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//map[@id='map']/*")));,然后再进行Dynamic_ads.click();。注意:这将选择第一个子节点。