@FindBy无法找到元素,但是findElement可以在salesforce上找到它

时间:2019-09-06 19:36:02

标签: java maven selenium-webdriver

我正在使用BDD Maven框架,并使用Selenium Webdriver测试Salesforce应用程序。

此外,在运行几页后,我遇到了以下问题:

我的PageFactory(Page程序包)正在使用注释@FindBy,但是Selenium无法找到要交互的WebElement,但是我创建了另一个项目来测试driver.findElement(By.xpath ...)是否有效,Selenium是否可以轻松找到WebElement。

通过@FindBy,我收到错误消息:

[31morg.openqa.selenium.ElementNotInteractableException: element not interactable

我还有另外一个使用@FindBy的页面,使用Relative或Absolute Xpath可以正常工作,但工作正常,但是在此页面中,它不起作用。 正如您在下面看到的那样,我尝试使用javascript和默认方法进行点击。

页面类别:

import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.PageFactory;

import Comgas.PoCProspect.util.driverContext;

public class EtapaC_DebitoPage {

    public EtapaC_DebitoPage() {
        PageFactory.initElements(driverContext.getDriver(), this);
    }


    @FindBy(how = How.XPATH, using = "//input[@type='checkbox'][@data-interactive-lib-uid='3']")
    protected WebElement checkBox;

动作类别:

import org.openqa.selenium.By;
import aaa.PoCProspect.page.EtapaC_DebitoPage;
import aaa.PoCProspect.util.driverContext;

public class EtapaC_DebitoAction extends EtapaC_DebitoPage {


    protected void clickEditAutorizaDebtAutom() {
        //driverContext.getDriver().findElement(By.xpath("chkAutorizaDebtAutom")).click();
        chkAutorizaDebtAutom.click();
    }

}

步骤定义类:

import org.openqa.selenium.JavascriptExecutor;
import aaa.PoCProspect.action.EtapaC_DebitoAction;
import aaa.PoCProspect.stepDef.util.util;
import aaa.PoCProspect.util.driverContext;
import io.cucumber.java.en.And;


public class EtapaC_DebitoStepDef extends EtapaC_DebitoAction{



    @And ("^Click on the checkbox$")
    public void AutorizaDebAutomatico() throws InterruptedException {
        Thread.sleep(5000);
        JavascriptExecutor js = (JavascriptExecutor)driverContext.getDriver();
        js.executeScript("arguments[0].click();", chkAutorizaDebtAutom); //This is a try to click with Java
        Thread.sleep(1000);
        clickEditAutorizaDebtAutom(); // this is a default click action from framework
    }



}


这是有效的代码:

package Selenium.UnitTest;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;


public class App {

    public static WebDriver driver;


    public static void main(String[] args) throws InterruptedException {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--disable-notifications");
        // Optional, if not specified, WebDriver will search your path for chromedriver.
        System.setProperty("webdriver.chrome.driver", "drivers\\chromedriver.exe");
        WebDriver driver = new ChromeDriver(options); //input objeto options na instanciação do driver
        String baseUrl = "https://salesforcerandomapp.com";
//      String tagName = "";
//      String divName = "";
        driver.manage().window().maximize();
        driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

      driver.findElement(By.xpath("//div[text()='Editar']")).click();
    }

}

我希望@FindBy可以找到我的WebElement,并且框架会在复选框上单击。这仅适用于最后显示的使用findElement的单个硒代码。

0 个答案:

没有答案