2017-05-14 64 views
0

在Java中嘗試執行Selenium的以下代碼時,出現此錯誤「缺少或無效的指針操作類型參數」。Java中的Selenium錯誤:缺少或無效的指針操作類型參數

public static void main(String args[]) throws InterruptedException 
{ 
    WebDriver driver = new FirefoxDriver(); 
    driver.get("https://www.flipkart.com/"); 

    driver.findElement(By.xpath(".//*[@class='_3Ji-EC']/li[8]/a")).click(); 

    WebElement elem = driver.findElement(By.className("_2zrpKA")); 
    elem.sendKeys("ABC"); 

    WebElement elem2 = driver.findElement(By.xpath(".//*[@class='_2zrpKA 
    _3v41xv']")); 
    elem2.sendKeys("XYZ"); 

    driver.findElement(By.xpath(".//*[@class='_2AkmmA _1LctnI 
    _7UHT_c']")).click(); 

    System.out.println("Success"); 

    //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    Thread.sleep(5000); 
    WebElement elem3 = driver.findElement(By.xpath(".//*[@class='_3Ji- 
    EC']/li[7]/a")); 
    System.out.println("success"); 
    Actions action = new Actions(driver); 
    action.moveToElement(elem3).build().perform(); 
    driver.findElement(By.xpath(".//*[@class='_1u5ANM']/li[9]/a")).click(); 
} 

我已經嘗試過這種使用Selenium 3.4.0和Firefox 51.X,52.X,53.x與最新geckodriver 16.1和16.0。 當我使用Firefox 53.x時,出現錯誤「Expected [object Undefined] undefined undefined to a string」else每當我收到錯誤時「指針操作缺少或無效的類型參數」。

在上面的代碼中,我能夠在沒有任何問題的情況下第二次打印「成功」,但之後出現錯誤。

+0

哪一行給出錯誤? –

+0

最後3行。我可以看到在我的控制檯上打印的最後四行中寫的「成功」。 –

+0

對我來說很好用鉻58.x鍍鉻汽油2.28和硒3.4。0 – kushal

回答

0

這裏是解決你的問題:

  1. 要與Selenium 3.4.0工作與geckodriver v0.16.1 & Mozilla Firefox瀏覽器53.x你需要在你的代碼指定geckodriver的絕對路徑爲:

    System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe"); 
    
  2. 你的xpath似乎對我很脆弱。您可能想要構建更多獨特的邏輯xpath。點擊Log In按鈕可能會做:

    driver.findElement(By.xpath("//div[@class='AsXM8z']/ul/li/a[@class='_2k0gmP'][text()='Log In']")).click(); 
    
  3. 我建議你不要只依靠一流的,有些附加更多的屬性。爲Enter Email場中的XPath可以是:

    WebElement elem = driver.findElement(By.xpath("//input[@class='_2zrpKA']")); 
    
  4. Enter Password的XPath是不是唯一的,你可能想將其改爲:

    WebElement elem2 = driver.findElement(By.xpath("//input[@class='_2zrpKA _3v41xv']")); 
    
  5. Login按鈕中的XPath必須是唯一的如下:

    driver.findElement(By.xpath("//button[@class='_2AkmmA _1LctnI _7UHT_c']")).click(); 
    
  6. 避免使用Thread.sleep(5000);而使用ImplicitlyWaitExplicitWait

  7. 點擊用戶名的XPath是又脆弱的,你可能想將其改爲:

    WebElement elem3 = driver.findElement(By.xpath("//div[@class='AsXM8z']/ul/li/a[@class='_1AHrFc _2k0gmP']")); 
    
  8. 中的XPath點擊Log Out按鈕又是脆弱的,你可能會喜歡將其更改爲:

    driver.findElement(By.xpath("//div[@class='_1H5F__']/div/ul/li/ul/li/a[@class='_2k0gmP'][text()='Log Out']")).click(); 
    
  9. 下面是一些簡單的調整自己的工作代碼塊;

    System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe"); 
    
    WebDriver driver = new FirefoxDriver(); 
    driver.get("https://www.flipkart.com/"); 
    
    driver.findElement(By.xpath("//div[@class='AsXM8z']/ul/li/a[@class='_2k0gmP'][text()='Log In']")).click(); 
    
    //Email 
    WebElement elem = driver.findElement(By.xpath("//input[@class='_2zrpKA']")); 
    elem.sendKeys("[email protected]"); 
    
    //Password 
    WebElement elem2 = driver.findElement(By.xpath("//input[@class='_2zrpKA _3v41xv']")); 
    elem2.sendKeys("pass_word"); 
    
    //Login Button 
    driver.findElement(By.xpath("//button[@class='_2AkmmA _1LctnI _7UHT_c']")).click(); 
    
    System.out.println("Success"); 
    
    //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    Thread.sleep(5000); 
    
    //Click on Name 
    WebElement elem3 = driver.findElement(By.xpath("//div[@class='AsXM8z']/ul/li/a[@class='_1AHrFc _2k0gmP']")); 
    System.out.println("success"); 
    Actions action = new Actions(driver); 
    action.moveToElement(elem3).build().perform(); 
    driver.findElement(By.xpath("//div[@class='_1H5F__']/div/ul/li/ul/li/a[@class='_2k0gmP'][text()='Log Out']")).click(); 
    

讓我知道如果這個回答你的問題。

+0

非常感謝。這有助於我現在能夠在Firefox中執行代碼。 並感謝您的建議。我會在下次記住他們。 –

+0

@RiteshGupta好消息:)很高興我能夠提供幫助。 – DebanjanB

相關問題