Есть файл с набором методов для 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();
}
}
праблема в том, что сайт еще не открылся, а мы уже пытаемся искать элемент. Много кто для таких целей ждут с помощью 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();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В приложения хочу сделать два Navigation Drawer как в приложении Stack Exchangeесть ли где нибудь тутариулы на эту задачу?
Хочу запустить и использовать данный проект который предназначен для: установки и запускаapk файлов на множестве подключенных к компьютеру...
Есть в приложении два боковых в менюОдин слева другой справа