2013-12-17 2 views
0

Я использую аннотации @FindBy для поиска WebElements. Но я хочу использовать эти WebElements в методах в качестве параметров. У меня был успех, только если WebElement был найден на странице. Но если я хочу подождать, я должен использовать By (с тем же локатором).Можно ли получить объект By WebElement

E.g.

private static final String SEARCHFIELD_LOC = "#search input[placeholder]"; 
@FindBy(css = SEARCHFIELD_LOC) 
public WebElement searchField; 
public By searchField_by = new By.ByCssSelector(SEARCHFIELD_LOC); 

Таким образом, я могу использовать этот WebElement в качестве объекта По каким-то способом, как

public boolean isElementDisplayedWithWait(final By by) { .... } 

Таким образом, для каждого элемента У меня есть 4 строки кода. Я должен лениться и искать способ упростить это.

ответ

0

Альтернативный метод ожидания/утверждения/проверки с помощью самого webelement доступен с расширенным webelement в QAF formerly ISFW. Например:

@FindBy(css = SEARCHFIELD_LOC) 
public WebElement searchField; 

searchField.waitForPresent(); 
searchField.assertPresent(); //auto wait 
searchField.verifyPresent(); //auto wait 

Reference:

  1. QAF Selenium testing-frameworks
  2. ISFW FAQ
+0

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

1

я нашел совершенно другое решение. Я буду хранить мои локаторы в виде строк.

public String searchField = ".slide.slide_search input[placeholder]" 

Так что только 1 строка кода на каждый локатор. И я надеюсь, что поддержки только локаторов CSS будет достаточно. Я не буду использовать @FindBy для получения WebElements. Вместо этого я получаю WebElements, используя специальный метод, который будет ждать элемента и будет регистрировать то, что происходит. Я буду осуществлять получение WebElement так:

WebElement we = wait.until(ExpectedConditions.visibilityOfElementLocated(new By.ByCssSelector(locator))); 

где услужливый

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
       .withTimeout(timeout, TimeUnit.SECONDS) 
       .pollingEvery(1, TimeUnit.SECONDS) 
       .ignoring(StaleElementReferenceException.class) ; 
Смежные вопросы