Как разработать собственный метод действий в архитектуре 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(...);
Другие вопросы по тегам