【问题标题】:Webdriver get Item From Local StorageWebdriver 从本地存储中获取项目
【发布时间】:2015-06-26 08:48:21
【问题描述】:

我正在尝试使用 Selenium Webdriver 从本地存储中获取项目。

我关注了this site,但是当我运行我的代码时,我得到了NullPointerException

当我调试代码时,我看到了函数:getItemFromLocalStorage 出于某种原因返回 NULL。

这是我的代码:

public class storage
 {
    public static WebDriver driver;
    public static JavascriptExecutor js;

    public static void main(String[] args)
    {       
        System.setProperty("webdriver.chrome.driver", "D://chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("http://html5demos.com/storage");
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.findElement(By.id("local")).sendKeys("myLocal");
        driver.findElement(By.id("session")).sendKeys("mySession");
        driver.findElement(By.tagName("code")).click(); // just to escape textbox

        String sItem = getItemFromLocalStorage("value");
        System.out.println(sItem);
    }

    public static String getItemFromLocalStorage(String key)
    {
        return (String) js.executeScript(String.format(
            "return window.localStorage.getItem('%s');", key));
    }
}

【问题讨论】:

  • 嗨,约翰,欢迎来到 Stack Overflow。您可以编辑您的问题以包含有关该错误的更多信息吗?部分调用堆栈会很有用,它可以显示异常是什么以及在代码中引发异常的位置。

标签: java selenium selenium-webdriver storage local


【解决方案1】:

那是因为您忘记正确实例化js 对象。在driver = new ChromeDriver();之后添加以下行。

js = ((JavascriptExecutor)driver);

它会起作用的。

【讨论】:

  • @John,如果它对您有用,请接受它作为正确答案。 :)
【解决方案2】:

我假设您的驱动程序实例上有 NPE。 您可以在创建驱动程序实例时设置驱动程序位置属性:

final ChromeDriverService chromeDriverService = new ChromeDriverService.Builder()
        .usingDriverExecutable(new File("D://chromedriver.exe")).build();

driver = new ChromeDriver(chromeDriverService);

顺便说一句,我使用了 selenium 2.44.0

【讨论】:

  • 对不起,我不知道 NPE 是什么,但是当我插入你的代码时,我仍然得到同样的异常。我也使用 selenium 2.44。
  • NPE 代表空指针异常。那么,您是否有代码可以对您的 sItem var 执行某些操作,该 sItem 变量为空?我看不到可以为 case sItem=null 引发异常的行
  • 不管怎样,如果你从localStorage获取一个变量,你应该把它放在第一位。正如我在html5demos.com/storage 看到的那样,localStorage 是空的。在这种情况下,您从 getItemFromLocalStorage() 返回的值将为空。
【解决方案3】:

使用此代码

        WebStorage webStorage = (WebStorage) new Augmenter().augment(driver);
        LocalStorage localStorage = webStorage.getLocalStorage();

        String user_data_remember = localStorage.getItem("user_data_remember");
        String emailAfterLogout;
        String passwordAfterLogout;

        if (!user_data_remember.equals("")) {

            JSONObject jsonObject = new JSONObject(user_data_remember);

            Boolean remember = jsonObject.getBoolean("remember");

            if (remember) {
                emailAfterLogout = jsonObject.getString("email");
                passwordAfterLogout = jsonObject.getString("password");

                if (emailAfterLogout.equals(email) && passwordAfterLogout.equals(password)) {
                    System.out.println("Remember me is working properly.");
                } else {
                    System.out.println("Remember me is not working.");
                }
            }
        } else {
            System.out.println("Remember me checkbox is not clicked.");
        }

【讨论】:

    猜你喜欢
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多