Как я должен использовать WebElements и Actions через объектную модель страницы? - PullRequest
0 голосов
/ 05 января 2019

У меня есть кнопка на моей веб-странице, которую я хочу нажать после ввода необходимой информации. В настоящее время я использую 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();

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

При использовании PageFactory в PageObjectModel , если вы ожидаете, что элемент будет загружен после ввода некоторой информации, через некоторый 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;
        }
    
    }
    

Подробное обсуждение можно найти в Как использовать явное ожидание с полями PageFactory и шаблоном PageObject

0 голосов
/ 07 января 2019

У вас есть

action.moveToElement((WebElement)CheckAvailability)

Это должно быть

action.moveToElement((button)CheckAvailability)

Как таковой, вы получите нулевой указатель, так как переменная с именем WebElement не определена

...