Как определить и щелкнуть эту ссылку для загрузки данных с использованием селена - PullRequest
0 голосов
/ 26 апреля 2018
<span class="download-data-link"><a download="" target"_blank"="" style="cursor:pointer">Download file in csv format</a></span>

Мне нужно нажать на кнопку «Загрузить файл в формате csv», но всегда отображается ошибка, что элемент не активен в тот момент, щелкните, чтобы увидеть скриншот:

image

Я пробовал все это

element=driver.findElement(By.xpath("//div[@class='download-data-link']/span"));
element.click();

WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement link = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[contains(@href,'data:application/csv;')]")));
link.click();

element=driver.findElement(By.xpath("//tr[@class='alt']/span[@class='download-data-link']"));
element.click();

driver.findElement(By.cssSelector(a[class='download-data-link']span)).click();

driver.switchTo().frame("iframe-applicationname_ModalDialog_0");
element=driver.findElement(By.linkText("Download file in csv format"));
element.click();
driver.switchTo().defaultContent();

element = driver.findElement(By.className("downoad-data-link"));
element.click();

это мой последний проект года ...

веб-сайт: https://www.nseindia.com/products/content/equities/indices/historical_index_data.htm

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

После нажатия кнопки GetData вам нужно прокрутить вниз, а затем вы можете взаимодействовать с WebElement, вот полный код для вашего требования:

Код:

публичный класс M {

static WebDriver driver;
static WebDriverWait wait;

public static void main(String[] args) throws InterruptedException {

        System.setProperty("webdriver.chrome.driver", "F:\\Automation_Learning\\chromedriver.exe");
        driver = new ChromeDriver();
        wait =new WebDriverWait(driver, 10);
        driver.manage().window().maximize();
        driver.get("https://www.nseindia.com/products/content/equities/indices/historical_index_data.htm");
        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("div[class='content']"))));
        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[class$='hasDatepicker'][id='fromDate']")));
        driver.findElement(By.cssSelector("input[class$='hasDatepicker'][id='fromDate']")).click();
        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("ui-datepicker-div"))));
        driver.findElement(By.cssSelector(".ui-datepicker-month")).click();
        selectDate(driver.findElement(By.cssSelector(".ui-datepicker-month")),"Jan" );
        driver.findElement(By.cssSelector(".ui-datepicker-year")).click();
        selectDate(driver.findElement(By.cssSelector(".ui-datepicker-year")), "2017");
        driver.findElement(By.xpath("//table[@class='ui-datepicker-calendar']/descendant::td[contains(@class,'ui-datepicker-week-end')]/a[text()='1']")).click();

        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[class$='hasDatepicker'][id='toDate']")));
        driver.findElement(By.cssSelector("input[class$='hasDatepicker'][id='toDate']")).click();

        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("ui-datepicker-div"))));

        driver.findElement(By.cssSelector(".ui-datepicker-month")).click();
        selectDate(driver.findElement(By.cssSelector(".ui-datepicker-month")),"Dec");
        driver.findElement(By.cssSelector(".ui-datepicker-year")).click();
        selectDate(driver.findElement(By.cssSelector(".ui-datepicker-year")), "2017");

        driver.findElement(By.xpath("//table[@class='ui-datepicker-calendar']/descendant::td[contains(@class,'ui-datepicker-week-end')]/a[text()='31']")).click();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("get")));
        driver.findElement(By.id("get")).click();
        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("div[class$='data-historic']"))));


        Actions action = new Actions(driver);
        action.keyDown(Keys.LEFT_CONTROL).sendKeys(Keys.END).keyUp(Keys.LEFT_CONTROL).build().perform();;

        wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Download file in csv format")));
        driver.findElement(By.linkText("Download file in csv format")).click();
}

    public static void selectDate(WebElement element , String textToBeSelected){
        Select select = new Select(element);
        select.selectByVisibleText(textToBeSelected);
    }

}

0 голосов
/ 26 апреля 2018

Вы можете использовать класс действия для того же самого,

Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.xpath("//span[@class='download-data-link']//a"))).click().perform();

ИЛИ

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();",driver.findElement(By.xpath("//span[@class='download-data-link']//a")));
0 голосов
/ 26 апреля 2018

Чтобы перейти по ссылке с текстом Скачать файл в формате csv , вы можете использовать любой из следующих Стратегий поиска :

  • cssSelector :

    driver.findElement(By.cssSelector("span.download-data-link>a")).click();
    
  • xpath :

    driver.findElement(By.xpath("//span[@class='download-data-link']/a")).click;
    

ОбновлениеA

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

  • Пример кода:

    package demo;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class Q50035477_click_link {
    
        public static void main(String[] args) {
    
            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            WebDriver driver = new FirefoxDriver();
            driver.get("https://www.nseindia.com/products/content/equities/indices/historical_index_data.htm");
            driver.findElement(By.cssSelector("input.textboxdata.hasDatepicker#fromDate")).sendKeys("23-04-2018");
            driver.findElement(By.cssSelector("input.textboxdata.hasDatepicker#toDate")).sendKeys("25-04-2018");
            driver.findElement(By.cssSelector("input.getdata-button")).click();
            new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Download file in csv format"))).click();
        }
    }
    
  • Снимок клиента браузера:

data_csc

Примечание : click() метод надежный, мощный и проверенный .Вы должны попытаться использовать метод click() надлежащим образом и в надлежащем состоянии, чтобы избежать отклонений.Грубые Действия класс и JavascriptExecutor интерфейс имеют свои собственные удобства использования и широко используются.


Обновление B

Кодовый блок для увеличенияданные:

    package demo;

    import org.openqa.selenium.By;
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;

    public class Q50035477_click_link {

        public static void main(String[] args) {

            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            WebDriver driver = new FirefoxDriver();
            driver.get("https://www.nseindia.com/products/content/equities/indices/historical_index_data.htm");
            driver.findElement(By.cssSelector("input.textboxdata.hasDatepicker#fromDate")).sendKeys("01-01-2017");
            driver.findElement(By.cssSelector("input.textboxdata.hasDatepicker#toDate")).sendKeys("31-12-2017");
            driver.findElement(By.cssSelector("input.getdata-button")).click();
            WebElement element = driver.findElement(By.linkText("Download file in csv format"));
            ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", element);
            element.click();
        }
    }

Примечание : снимок браузера остается прежним.

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