无法在原始类型 void 上调用 sendKeys(String)

Posted

技术标签:

【中文标题】无法在原始类型 void 上调用 sendKeys(String)【英文标题】:Cannot invoke sendKeys(String) on the primitive type void 【发布时间】:2019-01-12 22:42:04 【问题描述】:

我是 selenium 的新手,我正在使用页面工厂实现数据驱动的框架工作并不断收到以下错误:

尝试设置我的测试脚本时 - 用于以下内容:

String sEmail = ExcelUtil.getCellData (1,1);

loginpage.setEmail().sendKeys(sEmail);

这是我的 java 文件:

package pages;



import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

public class AmazonLoginPage 

 WebDriver driver;



    //public static void main(String[] args) 


    public AmazonLoginPage (WebDriver driver)  
        this.driver=driver;

    

//Using FindBy for locating Elements 
@FindBy(how=How.CSS, using="#ap_email")  WebElement emailTextBox;
@FindBy(how=How.CSS, using="#ap_password")  WebElement passwordTextBox;
@FindBy(how=How.CSS, using="#continue")  WebElement continueButton;
@FindBy(how=How.CSS, using="#signInSubmit")  WebElement signInSubmitButton;


//This method is used to set email in the email text box
public void setEmail() 
    emailTextBox.sendKeys();

//public void setEmail(String strEmail) 
    //emailTextBox.sendKeys();



//This method is used Continue after entering email
public void clickOnContinueButton() 
    continueButton.click();



//This method is used to set password in the password text box
public void setPassword (String strPassword) 
    passwordTextBox.sendKeys(strPassword);



//This method is used to click on the Sign In Button
public void clickOnSignInSubmitButton () 
    signInSubmitButton.click();


这是我的测试脚本-

package appModules;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;

import pages.AmazonHomePage;
import pages.AmazonLoginPage;
import utility.ExcelUtil;

public class SignIn_Action 

    WebDriver driver;

    public static void Execute (WebDriver driver) throws Exception 

        //Get values from Excel sheet, passing parameters to getCellData method
AmazonLoginPage loginpage = PageFactory.initElements(driver, AmazonLoginPage.class);
AmazonHomePage homepage = PageFactory.initElements(driver, AmazonHomePage.class);

homepage.clickOnSignIn();

String sEmail = ExcelUtil.getCellData (1,1);
String sPassword = ExcelUtil.getCellData(1, 2);


    loginpage.setEmail().sendKeys(sEmail);


    loginpage.clickOnContinueButton();

    loginpage.clickOnSignInSubmitButton();            

    

【问题讨论】:

【参考方案1】:

setEmail()方法的返回类型是void,所以你不能在这个方法上调用sendKeys()

这应该被替换:

loginpage.setEmail().sendKeys(sEmail);  

与:

loginpage.setEmail(sEmail);  

您的 setEmail 方法应该采用这样的字符串参数:

public void setEmail(String email) 
    emailTextBox.sendKeys(email);
  

【讨论】:

赞成。我还建议在 sendKeys 之前执行 emailTextBox.clear(); @BillHileman:谢谢。是的,我会把clear 作为一个好建议。我不知道为什么当他们刚得到解决方案时 OP 不回复。我们希望提供帮助,作为回报,如果解决方案有帮助,那么您应该乐于支持和接受。 在我看来,这是关于 SO 最令人沮丧的事情之一 - 被遗弃的问题。这就是为什么我会尽可能地为有用的答案投票。 @cruisdepandey- 抱歉,我们必须在不同的时区 - 我今天会试一试,让你知道它是如何工作的! 没问题。让我们知道这是否有用或需要在回答中进行一些修改。

以上是关于无法在原始类型 void 上调用 sendKeys(String)的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:无法调用非函数类型“(()-> Void)的值?”

iOS 9(Swift 2.0):无法使用类型为“(NSURL,(_,_,_)throws-> Void)”的参数列表调用“dataTaskwithURL”

为啥在我的 Web 服务中调用此方法时出现错误“无法将类型 'void' 隐式转换为 'string'?

无法使用类型为 (('WeatherResponse?, NSError?) -> Void 的参数列表调用“responseObject”

在远程桌面上运行时替代 SendKeys?

无法使用 (SendKeys.Send) 粘贴字符串