![](/img/trans.png)
[英]Hibernate Test - Exception in thread “main” java.lang.NullPointerException
[英]Exception in thread "main" java.lang.NullPointerException when trying to run a test case in Selenium with Java
這是我擁有的 Java 代碼:
package test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class FirstSeleniumTest {
public static WebDriver driver;
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","C:\\Users\\35196\\IdeaProjects\\selenium test\\SeleniumTest\\lib\\seleniumjars\\chromedriver.exe");
driver = new ChromeDriver();
driver.navigate().to("https://foodplanhealth.herokuapp.com/login");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
WebElement root1 = driver.findElement(By.cssSelector("my-app"));
WebElement shadow_root1 = expand_shadow_element(root1);
WebElement root2 = shadow_root1.findElement(By.cssSelector("mwc-drawer"));
WebElement shadow_root2= expand_shadow_element(root2);
WebElement root3 = shadow_root2.findElement(By.name("appContent"));
WebElement shadow_root3 = expand_shadow_element(root3);
WebElement root4 = shadow_root3.findElement(By.tagName("div#main-content"));
WebElement shadow_root4 = expand_shadow_element(root4);
WebElement root5 = shadow_root4.findElement(By.cssSelector("div#container"));
WebElement shadow_root5 = expand_shadow_element(root5);
WebElement root6 = shadow_root5.findElement(By.cssSelector("login-container"));
WebElement shadow_root6 = expand_shadow_element(root6);
WebElement root7 = shadow_root6.findElement(By.cssSelector("mwc-textfield"));
WebElement shadow_root7 = expand_shadow_element(root7);
WebElement root8 = shadow_root7.findElement(By.cssSelector("mdc-text-field__ripple"));
WebElement shadow_root8 = expand_shadow_element(root8);
WebElement login = shadow_root8.findElement(By.cssSelector("mdc-text-field__input"));
String js = "arguments[0].setAttribute('value','random@email.com')";
((JavascriptExecutor) driver).executeScript(js, login);
}
public static WebElement expand_shadow_element(WebElement element)
{
return (WebElement)((JavascriptExecutor)driver).executeScript("return arguments[0].shadowRoot", element);
}
}
代碼運行良好,直到第 35 行WebElement root4 = shadow_root3.findElement(By.tagName("div#main-content"));
我在哪里得到這個錯誤
test.FirstSeleniumTest.main(FirstSeleniumTest.java:35) 線程“主”中的異常 java.lang.NullPointerException
我知道整個代碼不正確且不完整,但由於此錯誤,我無法繼續前進。 我只是不明白為什么它在這一點上工作正常,但它沒有。 我向某人尋求幫助,他們告訴我代碼對他們來說運行良好,我檢查了 chrome 驅動程序版本,它與瀏覽器版本匹配。
有人可以告訴我有什么問題嗎?
NullPointerException
始終意味着 null 指針已被取消引用,方法是評估 null 引用之后的一段時間,或者將 null 索引為數組。
讓我們在您的源代碼行中研究這個案例:
WebElement root4 = shadow_root3.findElement(By.tagName("div#main-content"));
解引用運算符(句點)只有兩次出現:我們必須丟棄By
之后的那個,因為它是 class 並且不能是 null。 所以我們只剩下一個罪魁禍首: shadow_root3
肯定是 null。
下一步:為什么shadow_root3
是null? 它在前一行中初始化:
root3 = shadow_root2.findElement(By.name("appContent"));
WebElement shadow_root3 = expand_shadow_element(root3);
方法expand_shadow_element
返回輸入參數的shadowRoot
(如果沒有,則返回 null),因此我們必須得出結論,名為appContent
的 DOM 元素沒有設置shadowRoot
。
從這里開始,您必須調試您的 HTML 頁面來診斷它沒有shadowRoot
的原因,以及如何正確設置它。
它無法找到引發 null 指針異常的元素。 您可能需要更改 xpath 或通過定位器,您正在識別元素。
下面是訪問 email 文本框的代碼
String cssSelectorForHost1 = "my-app[title='FoodPlan']";
String cssSelectorForHost2 = "page-login";
String cssSelectorForHost3 = "mwc-textfield[type='email']";
Thread.sleep(1000);
WebElement shadowDomHostElement0 = driver.findElement(By.cssSelector("my-app[title='FoodPlan']"));
WebElement last0 = (WebElement) ((JavascriptExecutor) driver).executeScript("return arguments[0].shadowRoot", shadowDomHostElement0);
Thread.sleep(1000);
WebElement shadowDomHostElement1 = last0.findElement(By.cssSelector("page-login"));
WebElement last1 = (WebElement) ((JavascriptExecutor) driver).executeScript("return arguments[0].shadowRoot", shadowDomHostElement1);
Thread.sleep(1000);
WebElement shadowDomHostElement2 = last1.findElement(By.cssSelector("mwc-textfield[type='email']"));
WebElement last2 = (WebElement) ((JavascriptExecutor) driver).executeScript("return arguments[0].shadowRoot", shadowDomHostElement2);
Thread.sleep(1000);
last2.findElement(By.cssSelector(".mdc-text-field__input"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.