Skip to content

Commit 8cdf86f

Browse files
Merge pull request #686 from TikhomirovSergey/HlebHalkouski-master
PR issue fix.
2 parents d580d65 + aca465b commit 8cdf86f

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed

src/main/java/io/appium/java_client/pagefactory/DefaultElementByBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import io.appium.java_client.pagefactory.bys.ContentMappedBy;
2424
import io.appium.java_client.pagefactory.bys.ContentType;
2525
import io.appium.java_client.pagefactory.bys.builder.AppiumByBuilder;
26+
import io.appium.java_client.pagefactory.bys.builder.ByAll;
2627
import io.appium.java_client.pagefactory.bys.builder.ByChained;
2728
import io.appium.java_client.pagefactory.bys.builder.HowToUseSelectors;
2829
import org.openqa.selenium.By;
@@ -31,7 +32,6 @@
3132
import org.openqa.selenium.support.FindAll;
3233
import org.openqa.selenium.support.FindBy;
3334
import org.openqa.selenium.support.FindBys;
34-
import org.openqa.selenium.support.pagefactory.ByAll;
3535

3636
import java.lang.annotation.Annotation;
3737
import java.lang.reflect.AnnotatedElement;

src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import org.openqa.selenium.By;
2626
import org.openqa.selenium.support.pagefactory.AbstractAnnotations;
27-
import org.openqa.selenium.support.pagefactory.ByAll;
2827

2928
import java.lang.annotation.Annotation;
3029
import java.lang.reflect.AnnotatedElement;
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package io.appium.java_client.pagefactory.bys.builder;
2+
3+
import static com.google.common.base.Preconditions.checkArgument;
4+
import static com.google.common.base.Preconditions.checkNotNull;
5+
6+
import org.openqa.selenium.By;
7+
import org.openqa.selenium.NoSuchElementException;
8+
import org.openqa.selenium.SearchContext;
9+
import org.openqa.selenium.WebElement;
10+
11+
import java.util.Arrays;
12+
import java.util.List;
13+
import java.util.Optional;
14+
import java.util.function.Function;
15+
16+
17+
public class ByAll extends org.openqa.selenium.support.pagefactory.ByAll {
18+
19+
private final List<By> bys;
20+
21+
private Function<SearchContext, Optional<WebElement>> getSearchingFunction(By by) {
22+
return input -> {
23+
try {
24+
return Optional.of(input.findElement(by));
25+
} catch (NoSuchElementException e) {
26+
return Optional.empty();
27+
}
28+
};
29+
}
30+
31+
/**
32+
* @param bys is a set of {@link org.openqa.selenium.By} which forms the all possible searching.
33+
*/
34+
public ByAll(By[] bys) {
35+
super(bys);
36+
checkNotNull(bys);
37+
38+
this.bys = Arrays.asList(bys);
39+
40+
checkArgument(!this.bys.isEmpty(), "By array should not be empty");
41+
}
42+
43+
@Override
44+
public WebElement findElement(SearchContext context) {
45+
return bys.stream()
46+
.map(by -> getSearchingFunction(by).apply(context))
47+
.filter(Optional::isPresent)
48+
.map(Optional::get)
49+
.findFirst()
50+
.orElseThrow(() -> new NoSuchElementException("Cannot locate an element using " + toString()));
51+
}
52+
}

0 commit comments

Comments
 (0)