Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как предотвратить кражу фокуса окна Selenium RC во время выполнения моих тестов?

Автор вопроса: bakoyaroОтветов: 8

Я знаю, что я, вероятно, в незначительном меньшинстве, но я должен использовать свою машину в то же время, когда выполняются мои тесты. Что всегда мешает мне, так это то, что окно браузера всегда крадет фокус, когда я запускаю тестовые примеры с помощью Selenium RC. Что не позволяет мне запускать тесты более одного раза в день, в конце дня, прямо перед выходом из системы. Я попробовал Selenium Grid, но не могу заставить его прослушивать запросы только на локальном хосте, а не на 0.0.0.0 (требование от моего сетевого администратора).

Я просмотрел документацию по Selenium и множество сайтов по Selenium, но не смог найти однозначного ответа. Могу ли я предотвратить кражу фокуса окна тестами Selenium RC во время выполнения моего теста?

Я использую Firefox 3.6.13.

javafocusseleniumfirefoxacceptance-testing

Ответы

Ответ 1 · рейтинг 11 · dty

В Linux вы можете запустить vncserver на другом дисплее (скажем, :8 или что-то в этом роде), а затем заставить Selenium и ваши экземпляры Firefox использовать этот дисплей. Хорошо работает для нас, где я работаю.

Ответ 2 · рейтинг 7 · Vladimir Dyuzhev

Запустите его на VM. Дополнительным преимуществом является возможность тестирования под разными ОС и браузерами.

Насколько я понимаю, вы не можете избежать кражи фокуса, находясь на одной машине.

Ответ 3 · рейтинг 5 · Korny

Вы используете линукс? Класс FirefoxProfile имеет плохо документированную настройку, которая загружает специальную библиотеку, чтобы избежать кражи фокуса в Linux - установите для нее значение true:

http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/firefox/FirefoxProfile.html#setAlwaysLoadNoFocusLib(boolean)

Ответ 4 · рейтинг 3 · artbristol

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

Если вы используете JUnit для скрипта Selenium, вы можете использовать Spring SpringJUnit4ClassRunner для внедрения экземпляра selenium в виде bean-компонента.

Определите тестовый контекст для Spring selenium.xml (погуглите, если вы не знакомы с настройкой XML-файла конфигурации Spring) и включите экземпляр selenium:

<bean class="com.thoughtworks.selenium.DefaultSelenium" name="selenium">
    <constructor-arg index="0">
        <value>localhost</value>
    </constructor-arg>
    <constructor-arg index="1">
        <value>4444</value>
    </constructor-arg>
    <constructor-arg index="2">
        <value>*firefox</value>
    </constructor-arg>
    <constructor-arg index="3">
        <value>http://localhost:8080/webapp/</value>
    </constructor-arg>
</bean>

Затем в своем тесте введите экземпляр селена вместо new:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:selenium.xml")
public class WebappIT {

    @Resource
    private Selenium selenium;

    ... test code ...

}

Я несколько упростил это, в нашем фактическом коде мы оборачиваем экземпляр селена в класс провайдера, чтобы мы могли вызывать selenium.start() только один раз.

Ответ 5 · рейтинг 2 · bakoyaro

ОБНОВЛЕНИЕ

Я нашел обходной путь к моему окну кражи фокуса Firefox. Если вы используете Selenium как автономный сервер, как и я, вы можете добавить это:

-browserSessionReuse

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

Ответ 6 · рейтинг 1 · Venu

Мы не можем сделать это на одной машине. Либо нам нужна виртуальная машина, либо мы должны запрограммировать ее на уровне контроллера, чтобы наш скрипт не запускал какой-либо браузер для запуска скриптов.

Ответ 7 · рейтинг 1 · jdewit

Использование Chrome вместо Firefox помогло мне. Просто запустите его в другом рабочем пространстве, и он останется на месте.

Ответ 8 · Jose Victor

Если вы работаете в Linux, вы можете использовать несколько рабочих столов и настроить браузер так, чтобы он всегда открывался на определенном рабочем столе, а ваша IDE - на другом. Я сделал это в Ubuntu, это заняло 5 минут: https://askubuntu.com/a/90014

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы