2015-10-28 3 views
1

Привет всемСелен WebDriver - выбор Dropbox Java

К сожалению для каких-либо проблем. Я новичок в WebDriver, поэтому я был бы очень полезен для любой помощи. Если у вас есть учебное пособие по goo, которое я могу использовать, спасибо за это.

Так давайте в мою проблему:

Я получил Dropbox и попытаться выбрать любое значение и подтвердить, что с помощью кнопки затем получить предупреждение ....

Вот мой код :

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); 
      } 

Everytime я получает эту ошибку: org.openqa.selenium.StaleElementReferenceException: Элемент не найден в с ache - возможно, страница изменилась с момента ее поиска Продолжительность или таймаут команды: 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, rotatable = false, handlesAlerts = true, databaseEnabled = true, version = 41.0.2, platform = WINDOWS, nativeEvents = false, acceptSslCerts = true, webStorageEnabled = true, locationContextEnabled = true, browserName = firefox, принимаетScreenshot = true, javascriptEnabled = true, cssSelectorsEnabled = true}] Se ssion ID: 8634cbaf-70db-4b07-a19f-b040ba5c60bd

Я выяснил, что проблема в массиве, но я не знаю, как это решить. Если я размещаю правый массив, например dropdown [2]. Он работает

Спасибо

+0

Пожалуйста, отформатируйте ваше сообщение, чтобы быть более читаемым – Anton

+2

Сделано. Извините, что это был мой первый пост. – Mrna

ответ

0

Как предложение, вы можете попробовать поставить это:

Select listItem=new Select(... 

внутри ваших петель.

+0

Спасибо, к сожалению, это не поможет. Первый цикл в порядке, это проблема для (int a = 0; a Mrna

+0

Вероятно, первый вызов .click() делает этот XPath By.xpath ("// * [@ ид = 'главный']/таблица [2]/TBODY/тр [2]/Td [1 ]/select ") недействительный. Предлагаю вам проверить свой код javascript. –

+0

Я думаю, что ты прав. К сожалению, я не могу это проверить. Я просто изучаю селен, и я не делаю этого на своих собственных сайтах. У вас есть идеи, как решить проблему. Я попытался установить тайм-аут, но я не помогу. – Mrna

0

Я немного очистил ваш код. Было несколько вопросов. Думаю, я правильно его вернул, но у меня нет возможности проверить это.

  1. Вы хранили все OPTION значения в массив строк, а затем цикл по массиву. Вам не нужно это делать ... вы можете просто перебирать опции и сравнивать текст по ходу дела. Сэкономит вам двойную петлю.

  2. В ваших if..else вы выполняли те же две строки кода в обеих ветвях. Чтобы очистить это, просто потяните эти две строки перед if..then, чтобы предотвратить избыточность.

  3. Вы использовали | вместо ||. Я думаю, вы хотели использовать логический 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); 
    } 
} 
Смежные вопросы