如何按名称或数字返回页面对象是这样的:
homePage.get(widget.class, "Name").get(Input.class, 1).setValue("yahoo");
我使用get方法创建我的UI元素类(widget,Input),这些方法可以返回任何类的对象
小工具类
public class widget{
WebDriver driver;
By searchResult = By.xpath("//div[@id='ires']//a[contains(text(), '')]");
public widget (WebDriver driver) {
this.driver = driver;
}
public void click() {
driver.findElement(searchResult).click(); }
public <T> T get(Class<T> expectedPage, String uiclass){
return PageFactory.initElements(driver, expectedPage);
}
}
Button对象类
public class Button {
WebDriver driver;
public Button (WebDriver driver) {
this.driver = driver;
}
@FindBy(name="btnG")
WebElement button;
public void click() {
button.click();
}
public <T> T get(Class<T> expectedPage){
return PageFactory.initElements(driver, expectedPage);
}
}
主页类
public class HomePage {
WebDriver driver;
public HomePage(WebDriver driver) {
this.driver = driver;
}
@FindBy(xpath="//div[@class='widget']//a[text()='']")
WebElement linkInWidget;
public void click() {
linkInWidget.click();
}
public <T> T get(Class<T> expectedPage, String name){
return PageFactory.initElements(driver, expectedPage);
}
}
我的测试
public class searchTest {
WebDriver driver;
@BeforeTest
public void setup() {
driver = new FirefoxDriver();
driver.get("https://www.google.com.ua/");
}
@Test
public void testUI() {
HomePage homePage = PageFactory.initElements(driver, HomePage.class);
widget widget = PageFactory.initElements(driver, widget.class);
homePage.get(widget.class).get(Input.class).setValue("yahoo");
homePage.get(widget.class).get(Button.class).click();
}
}
结果是我们可以通过使用我们的类
来组合任何对象homePage.get(widget.class).get(Input.class).setValue("yahoo");
问题: 我的xpath是动态的,应该包含名称
"//div[@class='widget']//a[text()='+name+']"
如何返回具有特定名称的新对象,其结构如下:
page().get(Widget.class, "Widget name").get(Button.class, "Button name").click
有什么想法吗?
答案 0 :(得分:0)
Before you click on new window set the window into a map
after you open the window this window is not in the list so you can get his number
i have some method using java8
//Before click
public static String initWindows(WebDriver driver) {
windows = new HashSet<String>();
driver.getWindowHandles().stream().forEach(n -> windows.add(n));
return driver.getWindowHandle();
}
//After the click
public static String getNewWindow(WebDriver driver) {
List<String> newWindow = driver.getWindowHandles().stream()
.filter(n -> windows.contains(n) == false).collect(Collectors.toList());
System.out.println(newWindow.get(0));
return newWindow.get(0);
}