Как я могу предотвратить Selenium RC от кражи фокуса окна во время моих тестов? - PullRequest
6 голосов
/ 11 апреля 2011

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

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

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

Ответы [ 8 ]

10 голосов
/ 11 апреля 2011

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

6 голосов
/ 11 апреля 2011

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

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

5 голосов
/ 23 сентября 2013

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

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

2 голосов
/ 20 января 2012

UPDATE

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

-browserSessionReuse

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

2 голосов
/ 12 апреля 2011

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

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

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

<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 в классе провайдера, чтобы мы могли вызывать selenium.start () только один раз.

1 голос
/ 24 октября 2013

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

1 голос
/ 12 апреля 2011

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

0 голосов
/ 17 марта 2017

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

...