
com.automationrockstars.gir.mobile.ByVisibleText Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2015, 2016 Automation RockStars Ltd.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Apache License v2.0
* which accompanies this distribution, and is available at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Contributors:
* Automation RockStars - initial API and implementation
*******************************************************************************/
package com.automationrockstars.gir.mobile;
import com.google.common.collect.Lists;
import org.apache.commons.lang.ArrayUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebElement;
import org.parboiled.common.Preconditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import java.util.List;
public abstract class ByVisibleText extends By {
private static final Logger LOG = LoggerFactory.getLogger(ByVisibleText.class);
protected String[] filter;
protected boolean pattern = false;
public ByVisibleText(String... filter) {
this.filter = filter;
}
public static ByVisibleText visibleText(String... filter) {
if (MobileFactory.currentPlatform().equals(MobileFactory.ANDROID)) {
return new ByVisibleTextAndroid(filter);
} else if (MobileFactory.currentPlatform().equals(MobileFactory.IOS)) {
return new ByVisibleTextIos(filter);
}
Preconditions.checkState(false, "Platform cannot be determined");
return null;
}
public static ByVisibleText visibleTextPattern(String regex) {
ByVisibleText result = visibleText(String.format(".*%s.*", regex));
result.pattern = true;
return result;
}
public String toString() {
return String.format("By.visibleText : %s", ArrayUtils.toString(filter));
}
public String[] getFilter() {
return filter;
}
public abstract List findElements(final SearchContext context, final List lines);
@Override
public List findElements(final SearchContext context) {
List lines = lines();
if (lines.isEmpty()) {
LOG.debug("{} not in page source", Arrays.toString(getFilter()));
}
return findElements(context, lines);
}
protected List lines() {
if (pattern) {
return PageUtils.getLinesMatching(getFilter()[0]);
} else {
return PageUtils.getLinesContaining(getFilter());
}
}
@Override
public WebElement findElement(SearchContext context) {
List lines = lines();
if (lines.isEmpty()) {
throw new NoSuchElementException(String.format("Element searched by %s not found", Arrays.toString(getFilter())));
}
List result = findElements(context, Lists.newArrayList(lines.get(0)));
if (result.isEmpty()) {
throw new NoSuchElementException(String.format("Element searched by %s not found", Arrays.toString(getFilter())));
}
return result.get(0);
}
@Override
public boolean equals(Object o) {
if (o instanceof ByVisibleText) {
String[] theirs = (String[]) ArrayUtils.removeElement(((ByVisibleText) o).getFilter(), ByVisibleTextIos.VISIBLE);
String[] ours = (String[]) ArrayUtils.removeElement(getFilter(), ByVisibleTextIos.VISIBLE);
return ArrayUtils.isEquals(theirs, ours);
} else return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy