我正在尝试一种使用 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/