gpt4 book ai didi

java - Selenium 页面对象抛出 InvoicetargetException

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:07 24 4
gpt4 key购买 nike

我正在尝试为Web应用程序创建一个框架(Selenium+TestNg+java)(环境是MacOs+ChromeDriver,驱动程序服务器位于\usr\local\bin),但陷入了基本结构。我有一个类(Driversetup.java)启动浏览器,另一个类包含WebElements和方法(ProfileUpdateObjects.java),第三个类包含测试方法。现在,当我尝试运行只有一个方法的 TestNG 类时,出现以下异常。

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:138).

下面是代码(所有类都在不同的包中)。

public class ProfileUpdateTest {

@Test(enabled = true, priority = 1)
public void profileUpdate() throws MalformedURLException, InterruptedException, ParseException {
WebDriver driver = DriverSetup.startBrowser("chrome");
ProfileUpdateObjects pu = PageFactory.initElements(driver, ProfileUpdateObjects.class);
pu.navigateProfile();
}
}

ProfileUpdateObject 类的代码

public class ProfileUpdateObjects {
WebDriver driver;

public ProfileUpdateObjects(WebDriver cdriver) {
this.driver = cdriver;
}

@FindBy(xpath = " //div[@class='ico-menu']")
private WebElement menu;

@FindBy(xpath = "//a[@title='My Dashboard']")
private WebElement myDashboard;

@FindBy(xpath = " //a[contains(text(),'View Profile')]")
public WebElement profile;

@FindBy(xpath = "//li[contains(text(),'Permanent Address')]")
private WebElement permanentAddress;

@FindBy(xpath = "//li[contains(text(),'Banking Information')]")
private WebElement bankingInformation;

WebDriverWait waitfor = new WebDriverWait(driver, 2000);

public void navigateProfile() throws InterruptedException {
menu.click();
profile.click();
waitfor.until(ExpectedConditions.visibilityOf(permanentAddress));
}
}

DriverSetup.java

public class DriverSetup {
public static WebDriver driver;

public static WebDriver startBrowser(String browserName, String url) {
if (browserName.equalsIgnoreCase("chrome")) {
driver = new ChromeDriver();
}
driver.manage().window().maximize();
driver.get(url);
return driver;
}
}

pu.navigateProfile() 调用失败。另外,与 driver.find() 语法相比,@FindBy 是否占用更多内存?除了 POM 之外,自动化框架是否还有其他设计原则,因为 Web 上的大多数资源都是 POM 的一种或另一种实现。

最佳答案

简单的解决方案是移动新的WebDriverWait。它不应该被实例化为实例变量。

而不是:

WebDriverWait waitfor = new WebDriverWait(driver, 2000);

public void navigateProfile() throws InterruptedException {
menu.click();
profile.click();
waitfor.until(ExpectedConditions.visibilityOf(permanentAddress));
}

用途:

    public void navigateProfile() {
menu.click();
profile.click();
new WebDriverWait(driver, 2000).until(ExpectedConditions.visibilityOf(permanentAddress));
}

这将解决您的问题(已经测试过)

关于java - Selenium 页面对象抛出 InvoicetargetException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54878093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com