Как правильно сформировать @FindBy
Я использую io.qameta.atlas, как сформировать @FindBy аннотацию в интерфейсе MainPage? Я хочу протестировать фильтры checkbox на сайте мвидео. Вот как сделал я:
public interface MainPage extends AtlasWebElement{
@Description("Чекбокс {{sel-facet-checkbox}}")
@FindBy(".//span[contains(@class, 'fake-checkbox')and contains(.,'{{sel-facet-checkbox}}')]")
AtlasWebElement getCheckbox(@Param("sel-facet-checkbox") String value);}
Интерфейс MVideo:
public interface MVidioSite extends WebSite {
@Page(url = "product-list")
MainPage onMainPage();}
Класс теста:
public class WebSiteTest {
private Atlas atlas;
private WebDriver driver;
@BeforeEach
public void startDriver() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
atlas = new Atlas(new WebDriverConfiguration(driver, "https://www.mvideo.ru/product-list"));
}
@Test
public void produrtTest() throws AtlasException {
MVidioSite mVidioSite = onSite();
MainPage mainPage = mVidioSite.onMainPage();
mainPage.getCheckbox("Apple IMac").click();
}
private MVidioSite onSite() {
return atlas.create(driver, MVidioSite.class);
}
@AfterEach
public void stopDriver() {
driver.quit();
}}
При запуске кода получаю:
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":".//span[contains(@class, 'fake-checkbox')and contains(.,'{{sel-facet-checkbox}}')]"}(Session info: chrome=86.0.4240.75)
Ответы (1 шт):
Автор решения: Alexey R.
→ Ссылка
Вот проблемное место в Вашем xpath: contains(.,'{{sel-facet-checkbox}}). Здесь вы ищете скорее внутренний текст элемента, а должны искать вхождение дополнительного класса в атрибуте class.
Испльзуйте такой вариант:
@FindBy(".//span[contains(@class, 'fake-checkbox') and contains(@class, 'sel-facet-checkbox')]")