Как разработать собственный метод действий в архитектуре Selenium Grid - PullRequest
0 голосов
/ 15 мая 2018

У меня есть очень простой вопрос, связанный с тем, как разработать метод для выполнения 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 Ответ

0 голосов
/ 15 мая 2018

Если вы пытаетесь запустить параллельный тест и используете методы таким образом, избегайте статических методов.

Вам необходимо добавить синхронизированный модификатор, если вы работаете с объектами, требующими одновременного доступа.

Вы можете столкнуться с проблемой параллелизма (и в ситуации, не поддерживающей потоки), как только код вашего статического метода изменит статические переменные.

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

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(...);
...