Всем привет! Помогите понять почему в логи падают дубликаты(а часто и не только)
Создал 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
Для примера брал эту статью : Automation Remarks
Юзаю java, testng, selenium-java 3.4.0 (в мавене) и последняя версия драйвера для хрома
Если нужна еще инфа отпишите.
Спасибо за помощь)
Ну это надо смотреть тесты, вейты, как реализован пейдж обжект и т.д.
У меня тоже такая реализация и всё выводится 1 раз, дублируется если элемента долго нет.
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);
}
}
в либе я нашел EventFiringWebDriver. в нем есть метод
public WebElement findElement(By by) { #dispatcher.beforeFindBy(by, null, driver);
WebElement temp = driver.findElement(by); #dispatcher.afterFindBy(by, null, driver);
return createWebElement(temp);
}
в этих местах получаются дубликаты + в связке с вейтами, да если долго елемент не подгружается или подгружается хз даже, так же летит пачка дублей.
а какая у тебя версия либы в мавене? может сменить версию.