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

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

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

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


person bakoyaro    schedule 11.04.2011    source источник


Ответы (8)


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

person dty    schedule 11.04.2011
comment
Это, конечно, был мой первый выбор... Ваше творчество мне тоже нравится... Если бы только мне разрешили запустить Linux! +1 за аккуратный взлом. - person bakoyaro; 12.04.2011
comment
Запустите Linux на виртуальной машине в Windows: D - person mark-cs; 14.04.2011

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

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

person Vladimir Dyuzhev    schedule 11.04.2011

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

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

person Korny    schedule 23.09.2013
comment
Проклятые программисты и отсутствие у них документации! заорал виновный ;-) Я использую Linux на одних проектах, windows на других, это точно выручит. - person bakoyaro; 24.09.2013

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

Если вы используете 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() только один раз.

person artbristol    schedule 12.04.2011

ОБНОВЛЕНИЕ

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

-browserSessionReuse

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

person bakoyaro    schedule 20.01.2012

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

person Venu    schedule 12.04.2011

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

person jdewit    schedule 23.10.2013

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

person Jose Victor    schedule 17.03.2017