selenium - Groovy 给出 "No such Property"但它在方法中声明 : selenium and page object modelling

标签 selenium gradle groovy pageobjects

我正在尝试一种使用 Selenium 的新方法。以前我使用soapui 作为IDE,我正在转向intellij。在真正的 IDE 上工作有点不同,我不明白我做错了什么。我认为这与 What are 'properties' in Groovy? 有关

下面是我的页面

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 such property: Home for class: tests.login错误。它在方法中,我做错了什么?
我已尝试添加 homePage Home外法无济于事。我不确定它是否有帮助,但这是我的 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

关于selenium - Groovy 给出 "No such Property"但它在方法中声明 : selenium and page object modelling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58119849/

相关文章:

java - Selenium 将 Web 表格与 Excel 数据进行比较

python - 如何关闭 Selenium 打开的所有窗口?

java - Groovy 扩展模块方法 - 无方法签名

java - 如何显示 Groovy AntBuilder 类路径中包含的所有资源?

python - 我们应该为一群DBA采用哪种跨平台脚本语言?

java - Groovy 和 Java 静态变量行为

python - Selenium 无法使用 python 抓取 Shopee 电子商务网站

android - 在 build.gradle 中编译选择性模块

gradle - Gradle通过命令行修改build.gradle文件

javascript - Protractor 测试不适用于 IE,但适用于 FF/Chrome/Safari