t.me/atinfo_chat Telegram группа по автоматизации тестирования

как справиться с псевдоэлементами before в Selenium

page-factory
selenium
java
webdriver
Теги: #<Tag:0x00007fb2f7310f90> #<Tag:0x00007fb2f7310e50> #<Tag:0x00007fb2f7310d10> #<Tag:0x00007fb2f7310b80>

(Ольга Лутова) #1

Мне необходимо добиться нажатия на кнопку закрытия

Я пыталась нажать самым обычным образом, однако оказалось, что там есть некоторый псевдоэлемент before и мне необходимо нажать на span, однако он не активный.

Вот код HTML

<a class="delete-link link-inline" href="javascript::" onlock="showDeletePackageDialod(5836,'Test52617.0')" title="Delete package"
::before
<span id="deletePackageElement" style="display:none"</span>
</a>

При помощи page factory pattern написала в классе CheckList метод

private By deleteLocator = By.cssSelector("#deletePackageElement");
public CheckList deleteLocator() {
   driver.findElement(deleteLocator).click();
   return this;
}

После чего в классе MainPage написала метод

@FindBy(css = "#deletePackageElement")
private WebElement deleteLocator;

public CheckList deleteLocator() throws InterruptedException {
   deleteLocator.click();
   return new CheckList(driver);
}

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


(Сергей Кузьмин) #2

Olga_Lutova pseudoelements это стили а не настоящие елементы ! стучать по ним нечего и все равно не получится - наверное надо атрибут у span#deletePackageElement слелать видимым и он кликнется


(Ольга Лутова) #3

А как бы вы посоветовали его сделать видимым?


(Dmitry Morozov) #4

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


(Salciuc Vitalie) #5

нет толку зделать иго видемым если он скрыт как-бы ты тестируеш а не делаеши так что-бы тесты прошли (но если сильно надо можно ваздействовать над DOM через js ) но как-бы это неправельно если button не отображается , а он должен быти там виден это баг и твоя задача сообщить об этом а не поокрывать это ( это чисто мое мнение )


(Dmytro Kryshtopenko) #6

Может, span и не отображается, из-за аттрибута display:none, но попробуйте дернуть его parent::a от “#deletePackageElement


(Ольга Лутова) #7

Работает только при помощи использования js, что по итогу написала

public void deleteLocatorTest() {
  JavascriptExecutor = (JavascriptExecutor) driver;
  js.executeScript("jQuery('#deletePackageElement').show()");
 driver.findElement(By.cssSelector(".link-delite")).click();
}