如何在硒中执行js?

How to execute js in selenium?

Selenium WebDriver Java

任何人都知道如何执行此脚本js.executeScript("window.addEventListener('load',function(){document.getElementsByTagName('script')[1].src='google.com'})");

js.executeScript("window.load = function()
{document.getElementsByTagName('script')[1].src='google.com'})");

此脚本return 无效。 Eclipse 说:线程异常 "main" java.lang.NullPointerException 在 autotesting.itacademy.main(itacademy.java:58)

这里的主要代码是:

package autotesting;

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

//for read and write from file
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;

public class itacademy {

     private static WebDriver driver = null;

     public static JavascriptExecutor js = (JavascriptExecutor) driver;

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        JavascriptExecutor js = (JavascriptExecutor) driver;

        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().maximize();        
        driver.get("http://office.co.uk/");

        js.executeScript("window.addEventListener('load',function(){document.getElementsByTagName('script')[1].src='google.com'})");
            }}

提前致谢

您永远不会初始化 JavascriptExecutor。看这里,您将 driver 分配为 null,然后尝试将其转换为 JavascriptExecutor 并且从不初始化它:

private static WebDriver driver = null; // driver is null
public static JavascriptExecutor js = (JavascriptExecutor) driver; // js is null

稍后,您将 js 分配给 driver 然后 初始化您的驱动程序对象,此处:

JavascriptExecutor js = (JavascriptExecutor) driver; // js is null
driver = new FirefoxDriver(); // driver is now an object

但是当你用 js 做任何事情时,它仍然是空的:

js.executeScript("window.addEventListener('load',function({document.getElementsByTagName('script')[1].src='google.com'})"); // It's still null here!

您需要正确初始化 js 对象。对了,你已经把js声明为class成员了,为什么要在main里马上重新分配呢?

public static JavascriptExecutor js = (JavascriptExecutor) driver;
JavascriptExecutor js = (JavascriptExecutor) driver; //  This line is unnecessary in main