使用@FindBy 和 By 的区别;这个错误可能是什么原因?
Difference between using @FindBy and By; what could be thre reason for this error?
我正在自动化 https://www.zoho.com/login.html。此页面在框架内有登录部分。当我切换不同的框架并搜索我的 Email/Phone 字段(登录部分)时,我可以找到它然后使用工作块(下面)但不能使用类似的代码(也在下面)之间的唯一区别两块是我如何识别我的 userNameInputBox 元素。
//这是有效的
List<WebElement> iframeElements = driver.findElements(By.tagName("iframe"));
int nFrames = iframeElements.size();
//Switching frame to go to login frame
for (int i=0; i<=nFrames ; i++) {
System.out.println("nFrames: " +nFrames);
driver.switchTo().frame(i);
if (driver.findElement(By.name("lid")).isDisplayed()){
driver.findElement(By.name("lid")).sendKeys("myuserName1");
}}
但是,如果我使用这个(下面的代码)它不起作用,而是在我单击我的 userNameInput 到用户名字段的行中给我 NullPointerException。
///这是行不通的
//Elements
@FindBy(name="lid")
WebElement userNameInput;
//Switching frame to go to login frame
for (int i=0; i<=nFrames ; i++) {
System.out.println("nFrames: " +nFrames);
driver.switchTo().frame(i);
if (driver.findElement(By.name("lid")).isDisplayed()){
userNameInput.click(); //clicking the inputBox
userNameInput.sendKeys("myuserName"); //Sendingkeys into
}}
谁能解释一下这种异常的原因是什么?或者指出我错过了什么?我想为 WebElement 使用 @FindBy。
@FindBy
标签设计用于页面对象模型。要使用它,您必须使用 PageFactory 初始化页面对象,以便初始化字段,然后由 webdriver "found"。
有关它的文档,请参阅 https://github.com/SeleniumHQ/selenium/wiki/PageFactory。
因此,在您尝试使用 userNameInput
字段之前,您必须有一些像
这样的行
PageFactory.initElements(driver, page);
(其中 page
var 是使用 @FindBy
注释的 class。
我正在自动化 https://www.zoho.com/login.html。此页面在框架内有登录部分。当我切换不同的框架并搜索我的 Email/Phone 字段(登录部分)时,我可以找到它然后使用工作块(下面)但不能使用类似的代码(也在下面)之间的唯一区别两块是我如何识别我的 userNameInputBox 元素。
//这是有效的
List<WebElement> iframeElements = driver.findElements(By.tagName("iframe"));
int nFrames = iframeElements.size();
//Switching frame to go to login frame
for (int i=0; i<=nFrames ; i++) {
System.out.println("nFrames: " +nFrames);
driver.switchTo().frame(i);
if (driver.findElement(By.name("lid")).isDisplayed()){
driver.findElement(By.name("lid")).sendKeys("myuserName1");
}}
但是,如果我使用这个(下面的代码)它不起作用,而是在我单击我的 userNameInput 到用户名字段的行中给我 NullPointerException。
///这是行不通的
//Elements
@FindBy(name="lid")
WebElement userNameInput;
//Switching frame to go to login frame
for (int i=0; i<=nFrames ; i++) {
System.out.println("nFrames: " +nFrames);
driver.switchTo().frame(i);
if (driver.findElement(By.name("lid")).isDisplayed()){
userNameInput.click(); //clicking the inputBox
userNameInput.sendKeys("myuserName"); //Sendingkeys into
}}
谁能解释一下这种异常的原因是什么?或者指出我错过了什么?我想为 WebElement 使用 @FindBy。
@FindBy
标签设计用于页面对象模型。要使用它,您必须使用 PageFactory 初始化页面对象,以便初始化字段,然后由 webdriver "found"。
有关它的文档,请参阅 https://github.com/SeleniumHQ/selenium/wiki/PageFactory。
因此,在您尝试使用 userNameInput
字段之前,您必须有一些像
PageFactory.initElements(driver, page);
(其中 page
var 是使用 @FindBy
注释的 class。