Установите скорость выполнения selenium webdriver по умолчанию



Я провожу тесты с WebDriver. Я экспортировал некоторые тесты непосредственно из Selenium IDE. В этом тесте мне пришлось уменьшить скорость IDE, чтобы запустить его из-за нагрузки падения вниз. Как я могу замедлить свой тест в Selenium webdriver? Я уже поставил



 driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);


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

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class ProfileCheck {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private final StringBuffer verificationErrors = new StringBuffer();

@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "http://localhost:8080";
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
}

@Test
public void testProfileCheck() throws Exception {
System.out.println("Test if profiles have access to the screen");
// Administrateur (has access)

driver.get(baseUrl + "/Dashboard/index.jsp?lang=en");
driver.findElement(By.cssSelector("input[name=combo_profile]")).click();
driver.findElement(
By.cssSelector(".x-boundlist-item:contains('Administrateur')"))
.click();
driver.get(baseUrl + "/Params/ClientCutOff/index.jsp?lang=en");
try {
assertTrue(driver.getTitle().matches("^[\s\S]*ClientCutOff$"));
} catch (Error e) {
verificationErrors.append(e.toString());
}
// Habilitation (no access)
driver.get(baseUrl + "/Dashboard/index.jsp?lang=en");
driver.findElement(By.cssSelector("input[name=combo_profile]")).click();
driver.findElement(
By.cssSelector(".x-boundlist-item:contains('Habilitation')"))
.click();
driver.get(baseUrl + "/Params/ClientCutOff/index.jsp?lang=en");
try {
assertFalse(driver.getTitle().matches("^[\s\S]*ClientCutOff$"));
} catch (Error e) {
verificationErrors.append(e.toString());
}
}

@After
public void tearDown() throws Exception {

try {
Thread.sleep(5000);
driver.quit();
} catch (Exception e) {
}
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}

private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}

private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}

private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}


Прочитайте несколько ответов и ни одного помогли



Уменьшение скорости Selenium Webdriver



Https://sqa.stackexchange.com/questions/8451/how-can-i-reduce-the-execution-speed-in-webdriver-so-that-i-can-view-properly-wh



Selenium IDE-установить скорость по умолчанию для slow

1080   3  

3 ответов:

Не используйте sleep!!!

public static WebElement findElement(WebDriver driver, By selector, long timeOutInSeconds) {
    WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
    wait.until(ExpectedConditions.presenceOfElementLocated(selector));

    return findElement(driver, selector);
}

Когда-то существовал метод setSpeed () для Привязок Java Selenium WebDriver. Но он был отвергнут, потому что это не имеет смысла в отношении автоматизации браузера.

Вместо этого, если драйвер "быстрее", чем загрузка ваших элементов или sth подобных, вы всегда должны сделатьинтеллектуальное использование waits для обработки этих случаев.

Подводя итог, можно сказать, что в настоящее время нет возможности намеренно замедлять выполнениев самом WebDriver. другого пути нет. в настоящее время, чтобы явно замедлить ваши шаги, кроме реализации потока.сон ()

Но есть и другие варианты, которые вы можете изучить:

Например, вы можете написать свой собственный метод для щелчка элементов, если вы хотите замедлить щелчок элементов:

public void clickElement(WebElement element) {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    element.click();
}

Если вы хотите замедлить метод findElement, вы можете написать другой вспомогательный метод:

public void findElement(By by) {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    driver.findElement(by);
}

Вы даже можете написать свой собственный расширенный класс из одного из классов WebDriver, как описано здесь Вот так:

public class MyFirefoxDriver extends FirefoxDriver {

@Override
public WebElement findElement(By by) {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return by.findElement((SearchContext) this);
}

Вы можете написать эти методы для всех выполнений, которые вы хотите замедлить.

При нормальных обстоятельствах, когда он ищет элемент, Selenium продолжает пытаться найти элемент до тех пор, пока вы не установите значение "неявно ждать". Это означает, что если элемент будет найден раньше, то он продолжит выполнение теста. Я не эксперт в Java, но в коде, который вы предоставляете, я не могу идентифицировать биты, которые ищут выпадающий элемент. Поскольку выпадающее меню может быть загружено задолго до того, как будут загружены фактические элементы внутри него, я готов поспорить, что в этом и заключается ваша проблема: он ищет сам выпадающий список, находит его, перестает ждать и начинает пытаться выполнить остальную часть теста, которая терпит неудачу, потому что элементы еще не были загружены. Поэтому решением будет поиск конкретного элемента, который вы пытаетесь выбрать. К сожалению, я недостаточно хорошо разбираюсь в Java, чтобы предоставить вам фактическое решение кода.

В качестве отступления, по моему опыту, при экспорте из Selenium IDE во что-то другое вы в конечном итоге получаете тесты, которые являются почти, но не совсем, совсем не похоже на то, что вы ожидаете. Они могут делать то, что вы от них ожидаете, но обычно они используют короткие пути или, по крайней мере, другой подход, чем вы, если бы вы сами кодировали тесты.

Comments

    Ничего не найдено.