Не переходит по ссылкам тест

233
20 декабря 2017, 22:06

Есть файл с набором методов для selenium WebDriver на java. И есть тест. Тест открывает браузер, заходит на страницу, но потом падает, по ссылкам не переходит. И ничего поделать с этим не могу. Может я неправильно метод добавил или еще что... Дайте совет: Два метода надо добавить: getClickableElement и getVisibleElement. Сейчас методы есть, но если через них пишу, падает с ошибкой "Элемент не кликабелен", но я уверен что это не так. Или еще как Кликать и вводить текст, подскажите.

import org.openqa.selenium.By;
import com.selenium.test.configuration.TestsConfig;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.util.concurrent.TimeUnit;

public class WebDriverFactory {
    private static final long IMPLICIT_WAIT_TIMEOUT = 25;
    private static WebDriver driver;
    private static WebDriverWait sWebDriverWait;

    public static WebDriver getDriver() {
        if (driver != null) {
            return driver;
        } else {
            throw new IllegalStateException("Driver has not been initialized. " + "Please call WebDriverFactory.startBrowser() before use this method");
        }
    }

    public static void startBrowser(boolean isLocal) {
        if (driver == null) {
            Browser browser = TestsConfig.getConfig().getBrowser();
            if (!isLocal) {
                driver = new RemoteWebDriver(CapabilitiesGenerator.getDefaultCapabilities(browser));
            } else {
                switch (browser) {
                    case FIREFOX:
                        driver = new FirefoxDriver(CapabilitiesGenerator.getDefaultCapabilities(Browser.FIREFOX));
                        break;
                    // case FIREFOX:
                    // break;
                    case CHROME:
                        driver = new ChromeDriver(CapabilitiesGenerator.getDefaultCapabilities(Browser.CHROME));
                        break;
                    case IE10:
                        driver = new InternetExplorerDriver(CapabilitiesGenerator.getDefaultCapabilities(Browser.IE10));
                        break;
                    case SAFARI:
                        driver = new SafariDriver(CapabilitiesGenerator.getDefaultCapabilities(Browser.SAFARI));
                        break;
                    default:
                        throw new IllegalStateException("Unsupported browser type");
                }
            }
            driver.manage().timeouts().implicitlyWait(IMPLICIT_WAIT_TIMEOUT, TimeUnit.SECONDS);
        } else {
            throw new IllegalStateException("Driver has already been initialized. Quit it before using this method");
        }
    }

    public static void finishBrowser() {
        if (driver != null) {
            driver.quit();
            driver = null;
        }
    }

   public static WebElement getClickableElement(By by) {
        try {
            sWebDriverWait.until(ExpectedConditions.elementToBeClickable(by));
            WebElement element = null;
            element = element.findElement(by);
            return element;
        } catch (Exception e) {
            System.out.println("Элемент" + by.toString() + "не является кликабельным. \n");
            e.printStackTrace();
            System.out.println();
            return null;
        }
    }
    public static WebElement getVisibleElement(By by) {
        try {
            return sWebDriverWait.until(ExpectedConditions.visibilityOfElementLocated(by));
        } catch (Exception e) {
            System.out.println("Элемент" + by.toString() + "не является видимым на странице. \n");
            e.printStackTrace();
            System.out.println();
            return null;
        }
    }

    public static void takeScreenShot() {
        System.out.println("ScreenShot method called");
    }
}

Вот сам тест.

  import com.selenium.test.junit.rules.ScreenShotOnFailRule;
import com.selenium.test.webtestsbase.WebDriverFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import static org.junit.Assert.assertTrue;

public class SimpleTest {
    @Before
    public void beforeTest() {
        WebDriverFactory.startBrowser(true);
    }

    @Test
    public void testMainCredit() {
        String toSearch = "Selenium";
        WebDriverFactory.getDriver().get("http://www.mtsbank.ru");
        WebDriverFactory.getVisibleElement(By.cssSelector("#oldFormMTSBank__phone")).click();
    }

    @After
    public void afterTest() {
        WebDriverFactory.finishBrowser();
    }
}
Answer 1

праблема в том, что сайт еще не открылся, а мы уже пытаемся искать элемент. Много кто для таких целей ждут с помощью Awaitility

Например,

 Waiter.await()
            .atMost(TIMEOUT_SEC, SECONDS)
            .pollInterval(1, SECONDS)
            .ignoreExceptionsInstanceOf(StaleElementReferenceException.class)
            .until(element.isDisplayed());

вам нужно подождать немного после загрузки сайта

    driver.get("http://www.mtsbank.ru");
    Thread.sleep(500L);
    WebElement element = getVisibleElement(By.cssSelector("#oldFormMTSBank__phone"));
    element.click();
    driver.quit();
READ ALSO
Два Navigation Drawer в андроид ява

Два Navigation Drawer в андроид ява

В приложения хочу сделать два Navigation Drawer как в приложении Stack Exchangeесть ли где нибудь тутариулы на эту задачу?

221
Ошибки при создании jar с Maven [cthulhu]

Ошибки при создании jar с Maven [cthulhu]

Хочу запустить и использовать данный проект который предназначен для: установки и запускаapk файлов на множестве подключенных к компьютеру...

236
Динамичное изменение Navigation Drawer

Динамичное изменение Navigation Drawer

Есть в приложении два боковых в менюОдин слева другой справа

199