我应该如何通过页面对象模型使用WebElements和Actions?

问题描述 投票:0回答:2

我的网页上有一个按钮,我想在输入所需信息后点击该按钮。我目前正在使用By来建立页面的所有元素,但是想要将WebElements用于此按钮,然后使用Actions稍后单击它。我应该如何在Page Object类中执行此操作。

我尝试了以下方法:

WebElement addressinput = driver.findElement(By.xpath("//input[@id='pac-input']"));
By addressinput = By.xpath("//input[@id='pac-input']");//this works fine

但是在将Test类作为TestNG运行时,它会在WebElement行上显示空指针异常。试图用By做,但按钮只是不会收到点击。它在WebElements和我之前尝试过的操作非常精细,而不使用下面的POM是参考代码:

WebElement button = driver.findElement(By.xpath("//button[@id='btn_gtservice']"));  
Actions action = new Actions(driver);
action.moveToElement((WebElement) CheckAvailability).click().perform();
driver.switchTo().defaultContent();
selenium selenium-webdriver action pageobjects webdriverwait
2个回答
0
投票

你有

action.moveToElement((WebElement)CheckAvailability)

那应该是

action.moveToElement((button)CheckAvailability)

实际上,您将获得一个空指针,因为您没有定义名为WebElement的变量


0
投票

在PageObjectModel中使用PageFactory时,如果您希望在输入某些信息后加载该元素,通过某些JavaScript并且它可能不会立即出现在页面上,一旦通过WebDriverWait支持使用普通定位器返回该元素,您就可以使用这些操作工厂如下:

  • 代码块: package com.pol.zoho.PageObjects; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.ui.WebDriverWait; import org.openqa.selenium.interactions.Actions; public class ZohoLoginPage { WebDriver driver; public ZohoLoginPage(WebDriver driver) { PageFactory.initElements(driver, this); } @FindBy(xpath="//button[@id='btn_gtservice']") public WebElement myButton; public void doLogin(String username,String userpassword) { WebElement button = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(ZohoLoginPage.getWebElement())); new Actions(driver).moveToElement(button).click().perform(); } public WebElement getWebElement() { return myButton; } }

你可以在How to use explicit waits with PageFactory fields and the PageObject pattern找到详细的讨论

© www.soinside.com 2019 - 2024. All rights reserved.