Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Дублирование логов: log4j + WebDriverEventListener

log4j
events
java
webdriver
Теги: #<Tag:0x00007fedb78e8e68> #<Tag:0x00007fedb78e8d28> #<Tag:0x00007fedb78e8bc0> #<Tag:0x00007fedb78e8a80>

(Vladimir) #1

Всем привет! Помогите понять почему в логи падают дубликаты(а часто и не только)
Создал EventHandler implements WebDriverEventListener и реализовал нужные методы

В результате у меня в логах такое :

Should be By.xpath: //a[text()='Privacy Policy']
Element found: By.xpath: //a[text()='Privacy Policy']
Should be By.xpath: //a[text()='Privacy Policy']
Element found: By.xpath: //a[text()='Privacy Policy']
Should be By.xpath: //a[text()='Privacy Policy']
Element found: By.xpath: //a[text()='Privacy Policy']
Should be By.xpath: //a[text()='Privacy Policy']
Element found: By.xpath: //a[text()='Privacy Policy']
Attempt to click on the element
Thee element was clicked

Для примера брал эту статью : http://automation-remarks.com/selenium-logs/index.html
Юзаю java, testng, selenium-java 3.4.0 (в мавене) и последняя версия драйвера для хрома
Если нужна еще инфа отпишите.
Спасибо за помощь)


#2

Может вейты какие-то прописаны?


(Vladimir) #3

да есть вейты, просто не могу понять если элемент еще не подгружен допустим, почему оно выводит Element found?)


#4

Ну это надо смотреть тесты, вейты, как реализован пейдж обжект и т.д.
У меня тоже такая реализация и всё выводится 1 раз, дублируется если элемента долго нет.


(Vladimir) #5

как бы тебе это показать… ) сейчас немного кода накидаю


(Vladimir) #6
public class Driver {
    private WebDriver webDriver;
    private final int IMPLICIT_WAIT = 10;
    private final String ICHARTS_HUB = "http://127.0.0.1
    private final String SAUCELABS_HUB = "http://127.0.0.1
    private final String HUB = System.getProperty("hub");
    private final String BROWSER = System.getProperty("browser");
    private final String RESOLUTION = System.getProperty("resolution");
    protected EventFiringWebDriver driver;
    private EventHandler eventHandler = new EventHandler();

    public void createMyDriver(Boolean remote) throws MalformedURLException {
        DesiredCapabilities capability;
        if (remote) {
            if (HUB.equalsIgnoreCase("saucelabs")) {
                capability = DesiredCapabilities.chrome();
                capability.setCapability(CapabilityType.PLATFORM, System.getenv("SELENIUM_PLATFORM"));
                capability.setBrowserName(System.getenv("SELENIUM_BROWSER"));
                capability.setVersion(System.getenv("SELENIUM_VERSION"));
                capability.setCapability("screen-resolution", RESOLUTION);
                capability.setCapability("autoAcceptAlerts", true);

                /** Use this code to run on SauceLabs from local
                 * capability.setCapability("platform", "Windows 8");
                 * capability.setCapability("version", "52.0");
                 * capability.setCapability("screen-resolution","1920x1200");
                 */
                webDriver = new RemoteWebDriver(new URL(SAUCELABS_HUB), capability);

            } else {
                capability = DesiredCapabilities.chrome();
                webDriver = new RemoteWebDriver(new URL(ICHARTS_HUB), capability);
            }
        } else {
            System.setProperty("webdriver.chrome.driver", "src/test/resources/driver/chromedriver");
            capability = DesiredCapabilities.chrome();
            ChromeOptions options = new ChromeOptions();
            options.addArguments("incognito");
            capability.setCapability(ChromeOptions.CAPABILITY, options);

            webDriver = new ChromeDriver(capability);
            webDriver.manage().timeouts().implicitlyWait(IMPLICIT_WAIT, TimeUnit.SECONDS);
        }
        driver = new EventFiringWebDriver(webDriver);
        driver.manage().window().setSize(new Dimension(1440, 900));
        driver.register(eventHandler);
    }
}

от него наследуется BasePage который хранит в себе все ссылки на PageObject - ы

public class BasePage extends Driver {
public PG1 pg1;
public PG2 pg2;
public BasePage(WebDriver driver, Wait wait) {
pg1 = new PG1(driver, wait);
pg2 = new PG2(driver, wait)
}
}

Ну и сама станичка

public class FacebookPage {
    private WebDriver driver;
    private Wait wait;

public FacebookPage(WebDriver driver, Wait wait) {
        this.driver = driver;
        this.wait = wait;
        PageFactory.initElements(driver, this);
    }
}

Сорь может не удобно читать…(


(Vladimir) #7

Может еще что то добавить отпишите попробую скинуть, єлемент просто иногда 1 раз логируется а иногда (чаще всего) влетает куча дубликатов


#8

я через pagefactory не делал но чувствую что проблема скорей всего в вейтах, попробуй без вейтов


(Vladimir) #9

только что удалил вейты с класса драйвера и в PageObject юзал
WebElement button;

button.click();
Всеравно дубликаты везде(


#10

а в log4j пропертисах что ?


(Vladimir) #11

log4j.rootLogger = INFO,console, FILE
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.File=log.out
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n


#12

вроде нормально, ну тут значит весь код смотреть надо, попробуй отдебажить нормально


(Vladimir) #13

в либе я нашел EventFiringWebDriver. в нем есть метод
public WebElement findElement(By by) {
#dispatcher.beforeFindBy(by, null, driver);
WebElement temp = driver.findElement(by);
#dispatcher.afterFindBy(by, null, driver);
return createWebElement(temp);
}

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

а какая у тебя версия либы в мавене? может сменить версию.


#14

у меня вообще либы нет, у меня стандратный eventfiringwebdriver который идёт вместе с селениумом