如何在groovy和对象转换中解决null方法错误

时间:2014-12-22 17:43:38

标签: groovy geb

import java.io.IOException;
import geb.Browser
import org.openqa.selenium.WebDriver
import org.openqa.selenium.firefox.FirefoxDriver

public class Signin {
    def browser = new Browser()
    def driver

    public launch() throws IOException {
        browser.driver = new FirefoxDriver()
        browser.go"http://www.gmail.com/"
        sleep(1000)
        println "First Class completed"
    } 
}

主要课程

import geb.Browser;
import java.io.IOException;
import Signin

class Main {

    static main(args) throws IOException {
        Signin first =new Signin()
        first.launch()
        sleep(1000)
        Search third =new Search()
        third.search()
    }   
}

import geb.Browser
import java.io.IOException;
import org.openqa.selenium.WebElement
import org.openqa.selenium.By.ByXPath;
import org.openqa.selenium.WebElement.*;
import org.openqa.selenium.firefox.FirefoxDriver
import geb.*
import Signin

class Search extends Signin {
    def elementToClick

    void search() throws IOException {  
        sleep(1000)
        println"search class"
        wait(1000)
        WebElement myaccount =browser.$("a", title: "my account")
        myaccount.click() 
//        WebElement elementToClick = driver.$("a", title:"searchTerm");
//        elementToClick.click()  
        browser.$("input", id:"searchTerm").value("abi")
        sleep(1000)
        //driver.findElement(By.xpath("//*[@id=\"pay-now\"]")).click();
        println "Search class completed"  
    }  
}

输出:

First Class completed

search class

Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[]' with class 'geb.navigator.    EmptyNavigator' to class 'org.openqa.selenium.WebElement'
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[]' with class 'geb.navigator.EmptyNavigator' to     class 'org.openqa.selenium.WebElement'
    at Search.search(Search.groovy:22)
    at Search$search.call(Unknown Source)
    at Main.main(Main.groovy:22)

请帮我解决错误

注意:如果我启用WebElement elementToClick = driver。$(" a",title:" searchTerm");      elementToClick.click()这一行 它抛出错误$()null方法

1 个答案:

答案 0 :(得分:0)

如评论中所述,请尝试使用def代替WebElement。如果必须为变量指定类型,请尝试使用Navigator。在您的原始帖子中,Geb无法返回包含值a的属性title的内容my account链接。因此,返回EmptyNavigator,但不会延伸WebElement

使用的webdriver不知道$()方法。这是Geb在其页面内容处理中实现的方法。 Browser对象知道页面内容。

您在评论中的帖子看起来像是您尝试将参数传递给click(),其中没有一个是有效的。成功检索页面内容后,您将能够在初始帖子中尝试使用click()内容。

tim_yates在评论中提出了这一点,但我也同意,看起来你没有正确地在页面上获取内容。

有关工作示例,请参阅http://www.gebish.org/manual/current/intro.html#full_examples。该链接还将带您进入Geb文档。