Как разработать собственный метод действий в архитектуре Selenium Grid
У меня есть очень простой вопрос, связанный с тем, как разработать метод выполнения GRID селена.
В текущей реализации инфраструктуры селена в моем проекте мы создали класс действий, который включает все действия селена WebElelement в статическом формате. Для последовательного выполнения скрипта проблем нет. Но для параллельного выполнения скрипта я слышал, что мы не можем разработать метод как статичный, так как будет создана только одна копия. Затем, как написать метод пользовательских действий, который мы можем использовать в других классах.
Не могли бы вы посоветовать это?
Текущая реализация:
public class ActionUtil{
public static void selectByVisibleText(WebElement element, String visibleText, String elementName)
{
try {
Select oSelect = new Select(element);
oSelect.selectByVisibleText(text);
log.info(text + " text is selected on " + elementName);
} catch (Exception e) {
log.error("selectByVisibleText action failed.Exception occured :" + e.toString());
}
}
}
Использование статического метода selectByVisibleText в других классах страниц:
public void selectMemorableQuestion1(String question) {
ActionUtil.selectByVisibleText(memorableQuestion1, question, "memorableQuestion1");
}
1 ответ
Если вы пытаетесь запустить параллельный тест и использовать методы таким образом, избегайте статических методов.
Вам нужно добавить синхронизированный модификатор, если вы работаете с объектами, которые требуют одновременного доступа.
Вы можете столкнуться с проблемой параллелизма (и в ситуации, не поддерживающей потоки), как только код вашего статического метода изменит статические переменные.
Таким образом, нижняя строка использует синхронизированный модификатор, избегайте использования статического модификатора из-за проблем с безопасностью потока
public class ActionUtil{
public synchronized void selectByVisibleText(WebElement element, String visibleText, String elementName)
{
try {
Select oSelect = new Select(element);
oSelect.selectByVisibleText(text);
log.info(text + " text is selected on " + elementName);
} catch (Exception e) {
log.error("selectByVisibleText action failed.Exception occured :" + e.toString());
}
}
так что вызов будет:
ActionUtil.selectByVisibleText(...);