2015-10-28 55 views
1

大家好硒的webdriver - Dropbox的選擇的Java

對不起任何問題。我是WebDriver中的新成員,所以我會很樂意爲你提供幫助。 如果你有任何goo教程,我可以用它來表示感謝。

所以讓我們進入了我的問題:

我有一個保管箱,並嘗試挑選的每一個值,並確認與按鈕,然後會得到一個警告消息....

這裏是我的代碼:

public void specialniBudovyVsechny() throws IOException{ 
     try{ 
      driver.findElement(By.xpath("//*[@id='budovy']/a")).click(); 
      driver.findElement(By.xpath("//*[@id='main']/table[1]/tbody/tr[2]/td/strong[2]/a")).click();  
      Select listItem=new Select(driver.findElement(By.xpath("//*[@id='main']/table[2]/tbody/tr[2]/td[1]/select"))); 
      String[] dropdown = new String[listItem.getOptions().size()]; 
      WebElement element = driver.findElement(By.xpath("//*[@id='main']/p")); 
       for(int i=0;i<listItem.getOptions().size();i++) 
       { 
        listItem.selectByIndex(i); 
        dropdown[i] = listItem.getFirstSelectedOption().getText(); 
       } 


       for(int a = 0;a<dropdown.length ;a++){ 
        if(a == 0 | a == 1 | a == 12 | a == 13){ 
         listItem.selectByVisibleText(dropdown[a]); 
         driver.findElement(By.xpath("//*[@id='main']/table[2]/tbody/tr[2]/td[2]/input")).click(); 
         Assert.assertEquals(element.getText(), "Nemáš žádnou rozestavěnou budovu"); 
        } 
        else{ 
         listItem.selectByVisibleText(dropdown[a]); 
         driver.findElement(By.xpath("//*[@id='main']/table[2]/tbody/tr[2]/td[2]/input")).click(); 
         Assert.assertEquals(element.getText(), "Tvá rozestavěná budova: "+dropdown[a]+" - 0%"); 

        } }  } 
     catch (Exception vyjimka){ 
      getScreenShot(); 
      System.out.println("SpecialniBudovyVsechny"); 
      System.out.println(vyjimka); 
      } 

每次我得到這個錯誤: org.openqa.selenium.StaleElementReferenceException:元素在c未找到疼痛 - 也許頁面已經改變,因爲它被查找 命令持續時間或超時:11毫秒 有關此錯誤的文檔,請訪問:http://seleniumhq.org/exceptions/stale_element_reference.html 構建信息:版本:'2.48.2',修訂:'41bccdd',時間:'2015-10-09 19:55:52' 系統信息:host:'N0119',ip:'192.168.0.14',os.name:'Windows 7',os.arch:'amd64',os。版本:'6.1',java.version:'1.8.0_65' 驅動程序信息:org.openqa.selenium.firefox.FirefoxDriver 功能[{applicationCacheEnabled = true,rotate = false,handlesAlerts = true,databaseEnabled = true,version = 41.0.2,platform = WINDOWS,nativeEvents = false,acceptSslCerts = true,webStorageEnabled = true,locationContextEnabled = true,browserName = firefox,takesScreenshot = true,javascriptEnabled = true,cssSelectorsEnabled = true}] Se ssion ID:8634cbaf-70db-4b07-a19f-b040ba5c60bd

我發現問題是數組,但我不知道如何解決這個問題。如果我放置正確的數組例如下拉[2]。它的工作原理

謝謝

+0

請將您的文章格式化爲更具可讀性 – Anton

+2

完成。對不起,這是我的第一篇文章。 – Mrna

回答

0

作爲一個建議,你可以嘗試把這個:

Select listItem=new Select(... 

的環內。

+0

謝謝你,不幸的是它並沒有幫助。第一個循環沒問題(int a = 0; a Mrna

+0

可能第一次調用 。點擊() 使得此XPath By.xpath(「// * [@ id中= '主'] /表[2]/tbody的/ TR [2]/TD [1 ]/select「) 無效。 我建議你檢查你的javascript代碼。 –

+0

我認爲你是對的。不幸的是,我無法檢查它。我只是在學習硒,而我並沒有在自己的網站上這樣做。你有什麼想法如何解決這個問題。我試圖超時,但我沒有幫助。 – Mrna

0

我清理了一下你的代碼。有幾個問題。我認爲我把它放回了一塊,但我無法測試它。

  1. 你在一個字符串數組存儲所有OPTION值,然後通過陣列循環。沒有必要這麼做......您可以循環選擇並隨時比較文本。節省您不得不循環兩次。

  2. 在你的if..else你在兩個分支中執行相同的兩行代碼。要清理它,只需在if..then之前拉動這兩行以防止冗餘。您正在使用|而不是||。我想你的意思是使用邏輯OR這是||。有關更多信息,請參閱this page

這裏是清理完畢的代碼。試試看,如果遇到任何問題,請告訴我。

public void specialniBudovyVsechny() throws IOException 
{ 
    try 
    { 
     driver.findElement(By.xpath("//*[@id='budovy']/a")).click(); 
     driver.findElement(By.xpath("//*[@id='main']/table[1]/tbody/tr[2]/td/strong[2]/a")).click(); 
     Select listItem = new Select(driver.findElement(By.xpath("//*[@id='main']/table[2]/tbody/tr[2]/td[1]/select"))); 
     WebElement element = driver.findElement(By.xpath("//*[@id='main']/p")); 

     for (int a = 0; a < listItem.getOptions().size(); a++) 
     { 
      listItem.selectByIndex(a); 
      driver.findElement(By.xpath("//*[@id='main']/table[2]/tbody/tr[2]/td[2]/input")).click(); 
      if (a == 0 || a == 1 || a == 12 || a == 13) 
      { 
       Assert.assertEquals(element.getText(), "Nemáš žádnou rozestavěnou budovu"); 
      } 
      else 
      { 
       Assert.assertEquals(element.getText(), "Tvá rozestavěná budova: " + listItem.getFirstSelectedOption().getText() + " - 0%"); 
      } 
     } 
    } 
    catch (Exception vyjimka) 
    { 
     getScreenShot(); 
     System.out.println("SpecialniBudovyVsechny"); 
     System.out.println(vyjimka); 
    } 
}