@FindBy错误使用类选择

时间:2018-01-12 12:16:11

标签: selenium-webdriver pageobjects

我正在尝试在类@FindBy中使用注释Select实现Page Object。在Eclipse中,它显示了以下消息:

  

类型By中的方法id(String)不适用于参数(WebElement)。

我不知道为什么会出现此消息。按照下面的代码和错误图像。

enter image description here

Class FaturamentoGeTratamentoOsPage

public class FaturamentoGeTratamentoOsPage {
    WebDriver driver;

    @FindBy(id = "cboMotivo")
    WebElement CBOMotivo;
    public FaturamentoGeTratamentoOsPage(WebDriver driver) {
        this.driver = driver;
    }
    public void preencherCampoMotivo(String CampoMotivo) {
        // Campo Motivo
        WebElement campoMotivo = driver.findElement(By.id(CBOMotivo));
        Select slcMotivo = new Select(campoMotivo);
        slcMotivo.selectByVisibleText(CampoMotivo);
    }
    public void preencherCampoSubmotivo(String CampoSubMotivo) throws Exception {
    }
}

Class FaturamentoGeConectividadeFacilidadesTest

public class FaturamentoGeConectividadeFacilidadesTest {
    static WebDriver driver;
    @Before
    public void setUp() throws Exception {
        SelecionarNavegador nav = new SelecionarNavegador();
        driver = nav.iniciarNavegador("chrome", "http://10.5.9.45/BkoMais_Selenium/");
    }
    @Test
    public void selecionarFacilidades() throws Exception {
        // Logando na aplicação
        LogarBkoMaisPage login = new LogarBkoMaisPage(driver);
        login.logar("844502", "Bcc201707");

        // BackOffice >> FaturamentoGe >> Conectividade
        FaturamentoGeConectividadeFacilidadesPage menu = new FaturamentoGeConectividadeFacilidadesPage(driver);
        menu.logarFaturamentoGeConectividade();

        //Registro >> Novo caso
        RegistroNovoCasoPage reg = new RegistroNovoCasoPage(driver);
        reg.registrarCaso();

        //Preencher campos
        FaturamentoGeTratamentoOsPage campo = new FaturamentoGeTratamentoOsPage(driver);
        campo.preencherCampoMotivo(" Concluido ");
    }
    @After
    public void tearDown() throws Exception {
        Thread.sleep(5000);
        driver.quit();
    }
}

2 个答案:

答案 0 :(得分:1)

您需要添加pagefactory.init来初始化webelement。

public FaturamentoGeTratamentoOsPage(WebDriver driver) {    this.driver = driver;
PageFactory.initElements(driver, this);
}

不使用以下行..因为CBOMotive直接返回给你一个webelement

WebElement campoMotivo = driver.findElement(By.id(CBOMotivo));

答案 1 :(得分:0)

您收到错误是因为By.id()需要String,而不是WebElement。您已将CBOMotivo定义为WebElement,但将其视为String

以下是正确的用法

WebElement campoMotivo = driver.findElement(By.id("cboMotivo"));

你想要的是

public void preencherCampoMotivo(String CampoMotivo) {
    // Campo Motivo
    Select slcMotivo = new Select(CBOMotivo);
    slcMotivo.selectByVisibleText(CampoMotivo); 
}