我正在使用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的单个硒代码。