Как я могу увеличить в Selenium POM? - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь выбрать два количества одного и того же элемента в Selenium POM, выполняя цикл for для увеличения значения входного тега в два раза, но мое решение, похоже, не работает. Как я могу увеличить в два раза, используя POM?

Вот файл, в котором я храню объекты моей страницы:

package pageObjects;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Select;

public class TTPStorePage {

    WebDriver driver;

    public TTPStorePage(WebDriver driver) {
        this.driver = driver;
    }

    By size= By.id("size");
    By quantity= By.id("quantity_5cb788738ee07");
    By reset= By.className("reset_variations");
    By submit=By.cssSelector("button[type='submit']");
    By remove=By.xpath("//a[contains(@data-gtm4wp_product_id,'TS-TTP']");
    By contents=By.className("cart-contents");


    public void selectSize(int index) {
        Select drop = new Select(driver.findElement(size));
        drop.selectByIndex(index);
    }

    // The problem child.
    public void quantityItem() {
        for(int i=0;i<2;i++) {
            driver.findElement(quantity).sendKeys(Keys.ARROW_UP);
        }
    }

    public WebElement resetItems() {
        return driver.findElement(reset);
    }


    public WebElement submitButton() {
        return driver.findElement(submit);
    }

    public WebElement removeItem() {
        return driver.findElement(remove);
    }

    public WebElement cartContents() {
        return driver.findElement(contents);
    }

}

Вот файл, в котором я храню свои тесты. Это где у меня большая часть проблемы. Я пытаюсь понять, как правильно увеличивать мои предметы на два.

package SimpleProgrammer;

import java.io.IOException;
import org.testng.annotations.Test;
import resources.Base;
import pageObjects.TTPProductPage;
import pageObjects.TTPStorePage;

public class PurchaseApplication extends Base {

    @Test
    public void BuyItem() throws IOException {
        driver=initializeDriver();
        driver.get("https://simpleprogrammer.com/store/products/trust-the-process-t-shirt/");

        TTPProductPage pp= new TTPProductPage(driver);
        pp.TTPButton().click();
        TTPStorePage sp = new TTPStorePage(driver);
        sp.selectSize(4);
        // Right here
        sp.quantityItem();
    }

}

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Я просмотрел страницу, на которую вы пытаетесь зайти.И счетчик, к которому вы пытаетесь обратиться в классе TTPStorePage с помощью локатора quantity, имеет динамический идентификатор.Он меняется каждый раз, когда вы загружаете страницу.Вы должны изменить свою стратегию локатора.

Попробуйте использовать один из следующих локаторов для количества.

Css Selector:

By quantity = By.cssSelector("div.quantity > input");

XPath:

By quantity = By.xpath("//div[@class='quantity']/input");

Также в методе quantityItem вам не нужен цикл for, так как вы можете установить значение непосредственно на нужное значение с помощью sendKeys, так как это элемент input.

Попробуйте это

public void quantityItem() {
    driver.findElement(quantity).clear();
    driver.findElement(quantity).sendKeys("3");
    //pressing up arrow twice would make the spinner value 3
}
1 голос
/ 18 апреля 2019

Это поле INPUT, просто сначала очистите поле ввода, а затем предоставьте sendKeys значение. Пожалуйста, примите имя attr, уникальное, ваш идентификатор attr не уникален.

WebElement ele=driver.findElement(By.name("quantity"));
ele.clear();
ele.sendKeys("2");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...