好的,我正在使用POM
在Selenium/Maven
中创建一种框架。该项目有三个包
这是我在Library类中的代码:
package util;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class Lib {
//Question is regarding the method below
public static WebElement get(WebDriver driver, String url) {
WebElement link = driver.get(url);
return link;
}
public static WebElement findelement(WebDriver driver, String xpath) {
WebElement e = driver.findElement(By.xpath(xpath));
return e;
}
public static void sleep(WebDriver driver, int sec) throws InterruptedException {
Thread.sleep(sec*1000);
}
}
我希望能够从测试类中的Lib类调用get方法(第一个)。这是我的测试类代码:
package test;
import org.junit.Before;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import util.Lib;
public class Test extends Lib{
static WebDriver driver = new ChromeDriver();
@Before
public void before() {
System.out.println("Before Class starts here");
System.setProperty("webdriver.chrome.driver",
"C:\\Users\\TQ\\sel\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
Lib l = new Lib();
l.get(driver, "https://www.google.com/");
}
}
我知道我可以轻松地在测试类中执行driver.get(url)
但我想知道为什么它不能像我的lib类中的其他函数那样工作。
这是我收到"cannot convert from void to WebElement"
的错误消息。
提前致谢。
答案 0 :(得分:1)
您必须将webdriver的引用对象从测试类传递给lib。从测试类中删除extends Lib
。在lib类中创建一个构造函数,用于初始化引用对象。 Library类看起来应该是这样的。
package util;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class Lib {
WebDriver driver;
public Lib(WebDriver driver){
this.driver = driver;
}
//Question is regarding the method below
public static WebElement get(String url) {
WebElement link = driver.get(url);
return link;
}
public static WebElement findelement(String xpath) {
WebElement e = driver.findElement(By.xpath(xpath));
return e;
}
public static void sleep(int sec) throws InterruptedException {
Thread.sleep(sec*1000);
}
}
现在,使用 new 运算符创建Lib对象时,必须传递驱动程序实例。构造函数会将驱动程序引用传递给本地驱动程序变量,这将允许Test类使用Lib类方法。
Lib l = new Lib(driver);
l.get("https://www.google.com/");
将驱动程序实例传递给方法参数的编码方式将导致空指针异常。
答案 1 :(得分:1)
此方法无效。它应该看起来像:
//Question is regarding the method below
public static void get(WebDriver driver, String url) {
driver.get(url);
}
这就是全部。在这种情况下你不需要返回一些东西。
答案 2 :(得分:1)
错误说明了一切:
"cannot convert from void to WebElement"
您已编写方法 public static WebElement get(WebDriver driver, String url) {}
。但 get()不返回任何内容,定义为:
get(java.lang.String url)
Load a new web page in the current browser window.
Return Type :
void
因此,当您调用 WebElement link = driver.get(url); 时,return type
与函数调用不匹配,并且会引发错误。
解决方案是将返回视为 void 。在driver
打开URL
后,您可以通过Web Browser
实例轻松与WebDriver
实例进行互动,例如driver
,如下所示:
public static void get(WebDriver driver, String url) {
driver.get(url);
}