2016-03-28 17 views
2

İki tane köşeli olmayan sayfa var, biri metin girebildiğim bir form içeriyor ve ben bir kez daha Invoke düğmesine bastığımda başka bir tarayıcı penceresi alıyorum (Bazı metin çıkışı ile Chrome'da sekme). Yeni sekme biraz odaklanır, ancak bir kez yeni bir eleman almaya çalışırken, ilk sekmeye odaklanır. İşte benim test gibi görünür: Ben kolları kullanmayı deneyin yukarıdaki Gördüğünüz gibiPencereleri değiştirme ve açısal olmayan sayfaları içeren WebDriver'da odaklama

beforeEach(function() { 
     browser.ignoreSynchronization = true; 
    }); 

    it('Do authentication of session', function() { 
     session.goToCommandPage().then(function() { 
      browser.findElement(by.css('#content > span:nth-child(3) > ul > li:nth-child(5) > a', 'AuthenticateUser')).click(); 
     }).then(function() { 
      browser.findElement(by.css('#content > span > form > table > tbody > tr:nth-child(3) > td:nth-child(2) > input')).sendKeys(COMPANY_ID); 
     }).then(function() { 
      browser.findElement(by.css('#content > span > form > table > tbody > tr:nth-child(4) > td:nth-child(2) > input')).sendKeys('ADMIN'); 
     }).then(function() { 
      browser.findElement(by.buttonText('Invoke')).click(); 
     }).then(function() { 
      browser.sleep(7000); 
     }) 
    }); 

    it('Switch to the results tab', function() { 
     browser.getAllWindowHandles().then(function (handles) { 
      browser.getTitle().then(function (title) { 
       console.log('Title: ' + title); 
      }); 
      if (handles.length === 2) { 
       browser.switchTo().window(handles[1]).then(function() { 
        browser.sleep(7000); 
       }).then(function() { 
        browser.getTitle().then(function (title) { 
         console.log('Title now: ' + title); 
        }); 
        browser.findElement(by.css('.collapsible .expanded .text')).getText().then(function (textProduced) { 
         console.log('Text printed: ' + textProduced); 
        }); 
       }); 
      } 
     }); 
    }); 

ama kolları erişmek burada [1] görsel ikincisine için sekmeleri değiştirmez. Bu kod, yalnızca tutamaçları tuttuğum yerde kalıyor. Basılı başlığı görüyorum ve bu ilk formunki, ama bundan sonra bana bir ScriptTimeoutError vererek zaman aşımına uğradı. Anahtarları gövdeye göndermeyi bile denedim ve sekmeleri değiştirdim ancak ikinci sekmenin öğeleri bulunamadı. Testimi yürütmek için Chrome ve İletken kullanıyorum. Normalde açısal sayfalarla çalışıyorum, ancak bu ikisi açısal sayfa değil, daha sonra açısal bir sayfada kontrol edeceğim şeyler yapıyorlar.

Önceden teşekkür ederiz.

DÜZENLEME: Kodları tutamaçları gözden geçirip sayfanın başlığına göre değiştirdim. Başka bir sekmeye geçmek gibi görünmüyor. Neyi yanlış yapabileceğime dair herhangi bir önerin var mı? NOT: Bu JavaScript ile yazılmıştır.

it('Switch to the results tab', function() { 
     browser.getAllWindowHandles().then(function (handles) { 
      browser.getTitle().then(function (title) { 
       console.log('Title: ' + title); 
      }); 
      if (handles.length > 1) { 
       handles.forEach(function (tab) { 
        browser.switchTo().window(tab).then(function() { 
         browser.sleep(7000); 
        }).then(function() { 
         browser.getTitle().then(function (title) { 
          console.log('Title now: ' + title); 
          if(title != 'WebService Web Service') { 
           browser.findElement(by.css('.collapsible .expanded .text')).getText().then(function (textProduced) { 
            console.log('Text printed: ' + textProduced); 
           }); 
          } 
         }); 
        }); 
       }); 
      } 
     }); 
    }); 
+0

tarayıcı penceresi/sekmesi. Bir sekmeye başlığa nasıl başvurabilirim? İlk sekmenin resmi bir html başlık öğesi vardır, ancak bir sonraki sekme sadece sekme (krom) başlık alanında url'ye sahiptir, yani localhost/Service/... – unknownletter

+0

Bir sekmeye başlığa göre nasıl başvurursunuz? Bir örnek için çevrimiçi arıyorum, ancak şimdiye kadar bulduğum gibi, yukarıda yaptığım gibi tarayıcı penceresinin başlığını nasıl alacağım. – unknownletter

+0

Bu bir pencere, bir sekme değil. Tarayıcı penceresinin başlığı _is_ "tab" tarayıcısının başlığı. Bir sekme, Firefox, Chrome vb. Tarafından sağlanan görsel bir efekttir. Selenium sadece HTML sayfalarını önemser ve sayfalardan oluşan bir kapsayıcıyı tanımlamak için "window" sözcüğünü kullanır. Başlığıyla bir "sekme" ye başvurmak için, pencereye geçtikten sonra 'driver.getTitle()' işlevini kullanın. Yeni bir pencereye ("sekme") güçlü bir şekilde geçmek için, pencereyi açmadan önce tüm pencere tutamaçlarını almalısınız, daha sonra tüm pencere tutamaçlarını almalısınız, daha sonra "sonra" listesinde bulunan tutamağa geçiş yapmalısınız. " liste. –

cevap

0

DÜZENLEME: Kod Ben yeni açılan pencereye aktarmak için kullandıkları, ama bir sonuçlanır "ScriptTimeoutError: Zaman aşımı: Oluşturucu gelen mesajı aldıktan zaman aşımına uğradı".

it('Switch to the results tab', function() { 
     browser.driver.getAllWindowHandles().then(function (handles) { 
      browser.driver.getTitle().then(function (title) { 
       console.log('Title: ' + title); 
      }); 
      if (handles.length > 1) { 
       browser.driver.switchTo().window(handles[1]).then(function() { 
        browser.manage().timeouts().pageLoadTimeout(7000); 
       }).then(function() { 
        var outputElement = $('.collapsible .expanded .collapsible-content .text'); 
        var isClickable = EC.elementToBeClickable(outputElement); 
        browser.wait(isClickable, 12000, 'Waiting for output element'); 
       }).then(function() { 
        browser.driver.getTitle().then(function (title) { 
         console.log('Title now: ' + title); 
         browser.driver.findElement(by.css('.collapsible .expanded .collapsible-content .text')).getText().then(function (textProduced) { 
          console.log('Text printed: ' + textProduced); 
         }); 
        }); 
       }); 
      } 
     }); 
    }); 

kod aşağıda bazen çalışır, ancak başarısız çoğu zaman. İşte

kodu değiştirilmiş olduğu:

describe('Test', function() { 
    beforeEach(function() { 
     browser.ignoreSynchronization = true; 
    }); 

    it('Do authentication of session', function() { 
     session.goToCommandPage().then(function() { 
      browser.sleep(12000); 
     }).then(function() { 
      browser.driver.wait(function() { 
       return browser.driver.findElement(by.css('#content > span:nth-child(3) > ul > li:nth-child(5) > a')) 
        .then(function (elem) { 
         elem.click(); 
         return true; 
        }); 
      }, 12000, 'Waited for the AuthenticateUser link to load'); 
     }).then(function() { 
      browser.driver.wait(function() { 
       return browser.driver.findElement(by.css('#content > span > form > table > tbody > tr:nth-child(3) > td:nth-child(2) > input')) 
        .then(function (elem) { 
         elem.sendKeys(COMPANY_ID); 
         return true; 
        }); 
      }, 12000, 'Waited for the Company ID field to load'); 
     }).then(function() { 
      browser.driver.wait(function() { 
       return browser.driver.findElement(by.css('#content > span > form > table > tbody > tr:nth-child(4) > td:nth-child(2) > input')) 
        .then(function (elem) { 
         elem.sendKeys('ADMIN'); 
         return true; 
        }); 
      }, 12000, 'Waited for the User field to load'); 
     }).then(function() { 
      browser.driver.wait(function() { 
       return browser.driver.findElement(by.css('#content > span > form > table > tbody > tr:nth-child(6) > td:nth-child(2) > input')) 
        .then(function (elem) { 
         elem.submit(); 
         return true; 
        }); 
      }, 12000, 'Waited for the Invoke button to load'); 
     }).then(function() { 
      browser.sleep(7000); 
     }).then(function() { 
      browser.driver.wait(function() { 
       return browser.driver.getAllWindowHandles().then(function (handles) { 

        if (handles.length > 1) { 
         return true; 
        } 
       }); 
      }, 12000, 'Waited for window count to be greater than 1'); 
     }); 
    }); 

    it('Switch to the results tab', function() { 
     browser.driver.getAllWindowHandles().then(function (handles) { 
      browser.driver.getTitle().then(function (title) { 
       console.log('Title: ' + title); 
      }); 
      if (handles.length > 1) { 
       handles.forEach(function (tab) { 
        browser.driver.switchTo().window(tab).then(function() { 
         browser.sleep(7000); 
        }).then(function() { 
         browser.driver.getTitle().then(function (title) { 
          console.log('Title now: ' + title); 
          if(title == 'localhost/Service/WebService.asmx/AuthenticateUser') { 
           browser.driver.findElement(by.css('.collapsible .expanded .collapsible-content .text')).getText().then(function (textProduced) { 
            console.log('Text printed: ' + textProduced); 
           }); 
          } 
         }); 
        }); 
       }); 
      } 
     }); 
    }); 
}); 

Ben sürekli geçmesine bu alamayan neden emin değilim.

İlgili konular