Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy给出了;没有此类财产”;但是它在方法中声明:selenium和page对象建模_Selenium_Gradle_Groovy_Pageobjects - Fatal编程技术网

Groovy给出了;没有此类财产”;但是它在方法中声明:selenium和page对象建模

Groovy给出了;没有此类财产”;但是它在方法中声明:selenium和page对象建模,selenium,gradle,groovy,pageobjects,Selenium,Gradle,Groovy,Pageobjects,我正在尝试一种使用硒的新方法。之前,我将soapui用作IDE,现在我将转向intellij。在一个真正的IDE上工作有点不同,我不明白我做错了什么。我想这和 下面是我的页面 package pages import org.openqa.selenium.By import org.openqa.selenium.WebDriver import org.openqa.selenium.WebElement class homePage{ WebDriver driver

我正在尝试一种使用硒的新方法。之前,我将soapui用作IDE,现在我将转向intellij。在一个真正的IDE上工作有点不同,我不明白我做错了什么。我想这和

下面是我的页面

package pages

import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.WebElement

class homePage{
    WebDriver driver
    homePage(WebDriver driver){
        this.driver=driver
    }
    By openLogin=By.cssSelector("#mainLoginBtn")
    By user=By.cssSelector("#userId")
    By pin =By.cssSelector("#password")
    By go = By.cssSelector("#loginBtn")

    WebElement loginBox(){
        return driver.findElement(openLogin)
    }
    WebElement pin(){
        return driver.findElement(pin)
    }
    WebElement userName(){
        return driver.findElement(user)
    }
    WebElement submitLogin(){
        return  driver.findElement(go)
    }
}
下面是我的测试用例:

package tests

import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import org.testng.annotations.AfterTest
import org.testng.annotations.BeforeTest
import org.testng.annotations.Test
import pages.homePage

class login{
    private static final Logger log = LogManager.getLogger(login)
    WebDriver driver

    @BeforeTest
    void setup(){
        System.setProperty("webdriver.chrome.driver","c:\\drivers\\chromedriver.exe")
        WebDriver driver = new ChromeDriver()
        driver.get("https://somewebsite")
    }

    @Test
    void login2(){
        homePage Home = new homePage(driver)
        Home.loginBox().click()
        Home.userName().sendKeys("user")
        Home.pin().sendKeys("user")
        Home.submitLogin().click()
        log.info "it worked"
    }
    @AfterTest
    void kill(){
        driver.close()
        driver.quit()
    }
}
因此,当我运行login2()时,驱动程序会打开上述站点,并立即向我提供
groovy.lang.MissingPropertyException:No-this-property:Home for class:tests.login
错误。方法就是这样,我做错了什么? 我尝试在方法之外添加
主页
,但没有效果。我不确定它是否有用,但这是我的gradle文件:

plugins {
    id 'groovy'
}

group 'someRandomName'
version '1.0-SNAPSHOT'

repositories {
    maven { url 'http://repo1.maven.org/maven2' }
}
ext {
    seleniumVersion = '3.141.59'
}
test {
    useTestNG()
}
dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    testCompile group: 'org.testng', name: 'testng', version: '7.0.0'
    testCompile "org.seleniumhq.selenium:selenium-support:${seleniumVersion}"
    testCompile group: 'io.appium', name: 'java-client', version: '7.2.0'
    testCompile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: "${seleniumVersion}"
    testCompile group: 'org.seleniumhq.selenium', name: 'selenium-server', version: "${seleniumVersion}"
    testCompile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: "${seleniumVersion}"
    testCompile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.12.1'
    testCompile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.12.1'
}

这与你的资本化有关。类名应以大写字母开头。语法的一部分是确定调用方法和声明变量之间的区别

class HomePage {}
HomePage home = new HomePage() // conventional

谢谢你写得这么好。从现在起我一定要遵守这些惯例
class HomePage {}
HomePage Home = new HomePage() // fine, but not conventional
class homePage {}
homePage Home = new homePage() // error - the grammar reads this as a method call:
                               // this.homePage(Home = new homePage())
// again demonstrating that this is a method call syntax
class homePage {}
public void homePage(def a) { println a + "456" } 
def Home;
homePage Home = 123 // prints 123456, same as this.homePage(Home = 123)
assert Home == 123
class homePage {}
new homePage() // fine apparently...
class homePage {}
homePage h; // ... the error is on the variable declaration part