как нажимать динамические ссылки, такие как реклама на веб-странице, используя селен - PullRequest
0 голосов
/ 29 августа 2018

Я новичок в веб-драйвере Selenium и пытаюсь протестировать веб-страницу с динамическими ссылками (динамическая реклама). Пример: реклама на https://mail.rediff.com/cgi-bin/login.cgi

Я пытался использовать xpath, classname и id, но ничего из этого не работает. Это происходит потому, что каждый раз, когда на странице отображается новое содержимое, поэтому он не может найти элемент и выбрасывает исключение в потоке "main":

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 голосов
/ 29 августа 2018

Не удалось найти элементы для динамической рекламы, поскольку она еще не полностью загружена на странице загрузки. Я рекомендую добавить явное время ожидания для конкретного добавления, которое вы ищете. Вы можете проверить эту ссылку здесь для получения дополнительной информации.

В любом случае, вот ваше решение:

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();. ПРИМЕЧАНИЕ. При этом будет выбран первый дочерний узел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...