2012-04-13 13 views
6

C# içinde Selenium WebDriver Uzantıları kullanıyorum, seçili bir listeden bir kısmi metin değeri (gerçekte ön boşluk var) . Kısmi bir metin eşleştirmesi kullanarak çalışamıyorum. Yanlış bir şey mi yapıyorum yoksa bu bir hata mı?C# Selenium WebDriver bağlamaları ile SelectByText (kısmi) kullanma çalışmıyor gibi görünüyor.

tekrarlanabilir örnek: Eğer kesinlikle bir hata raporu sunmalıdır basit HTML sayfası sorunu yeniden Eğer OpenQA.Selenium.NoSuchElementException: Cannot locate element with text: Featured downloads

+0

SelectByText'i ("Özel indirilenler") denediniz mi? Eminim ki, bağlayıcılardan hiçbiri dizgeden gelen bir boşluk bırakmıyor. – jarib

+0

Evet, bunu denedim ve işe yarıyor. –

+0

Ancak, yöntem belgelerine göre görünüşte bu yöntemin desteklediği alt dizgeyle seçmek istiyorum. –

cevap

6

SelectByText yöntem bozuldu, bu yüzden kendi uzantısı yöntemi yapmak içindir ne yapacağını SelectBySubText denilen yazdı.

using System.Linq; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Support.UI; 

namespace AutomatedTests.Extensions 
{ 
    public static class WebElementExtensions 
    { 
     public static void SelectBySubText(this SelectElement me, string subText) 
     { 
      foreach (var option in me.Options.Where(option => option.Text.Contains(subText))) 
      { 
       option.Click(); 
       return; 
      } 
      me.SelectByText(subText); 
     } 
    } 
+0

Merhaba Alister, bu büyük bir uzantı ve tam olarak aradığım şey. Ancak, bu Selenium uzantıları ile ilk defa ve nasıl arayacağımı bilmiyorum. Görmek için beklemeliyim VS mySelect.SelectBySubText (subText) gibi? – bearaman

+0

@bearaman evet, sınıfınız için bir kullanım ifadeniz olduğunda, bunu normalde olduğu gibi Seçme Elemanı'ndan aramanız gerekir. –

0

:

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Firefox; 
using OpenQA.Selenium.Support.UI; 

namespace AutomatedTests 
{ 
    [TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     public void TestMethod1() 
     { 
      var driver = new FirefoxDriver(); 
      driver.Navigate().GoToUrl("http://code.google.com/p/selenium/downloads/list"); 
      var selectList = new SelectElement(driver.FindElement(By.Id("can"))); 
      selectList.SelectByText("Featured downloads"); 
      Assert.AreEqual(" Featured downloads", selectList.SelectedOption.Text); 
      selectList.SelectByValue("4"); 
      Assert.AreEqual("Deprecated downloads", selectList.SelectedOption.Text); 
      driver.Quit(); 
     } 
    } 
} 

hata verir.

FindElements(By.XPath(".//option[normalize-space(.) = " + EscapeQuotes(text) + "]")) 

ve bir şey bulamazsa, o zaman bunu yapar: source codeSelectByText baktığımızda

bu ilk does

string substringWithoutSpace = GetLongestSubstringWithoutSpace(text); 
FindElements(By.XPath(".//option[contains(., " + EscapeQuotes(substringWithoutSpace) + ")]")) 

Yani teoride çalışması gerekir. Ayrıca, XPath ile etrafta oynayabilir ve sizin durumunuzda çalışıp çalışmayacağını görebilirsiniz.

+0

Teşekkürler: Bunun için bir geçici çözüm yazdım (diğer cevaba bakınız). –