2012-04-13 7 views
6

मैं आंशिक पाठ मान (वास्तविक में एक स्थान है) द्वारा एक चयन सूची से मूल्य का चयन करने के लिए सी # में सेलेनियम वेबड्राइवर एक्सटेंशन का उपयोग कर रहा हूं। । मैं इसे आंशिक पाठ मिलान का उपयोग करके काम नहीं कर सकता। क्या मैं कुछ गलत कर रहा हूं या यह एक बग है?सी # सेलेनियम वेबड्राइवर बाइंडिंग के साथ SelectByText (आंशिक) का उपयोग करना प्रतीत नहीं होता

प्रतिलिपि प्रस्तुत करने योग्य उदाहरण:

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

त्रुटि प्रदान करता है: OpenQA.Selenium.NoSuchElementException: Cannot locate element with text: Featured downloads

+0

क्या आपने SelectByText ("फीचर्ड डाउनलोड") का प्रयास किया है? मुझे यकीन है कि स्ट्रिंग से बाइंडिंग स्ट्रिप व्हाइटस्पेस में से कोई भी नहीं। – jarib

+0

हां, मैंने कोशिश की थी और यह काम करता है। –

+0

लेकिन मैं प्रलेखन के अनुसार चयन करना चाहता हूं, जो स्पष्ट रूप से यह विधि समर्थन करता है। –

उत्तर

6

SelectByText विधि टूट गया है, इसलिए मैं अपने खुद के विस्तार विधि SelectBySubText कहा जाता है यह क्या करने के लिए है करने के लिए लिखा था।

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

हाय अलस्टर, यह एक बढ़िया विस्तार है और वास्तव में मैं जो खोज रहा था। हालांकि, यह सेलेनियम एक्सटेंशन के साथ मेरा पहला समय है और मुझे यकीन नहीं है कि इसे कैसे कॉल करें। क्या मुझे यह देखने की उम्मीद है कि यह वीएस में दिखाई देगी जैसे मेरी चयन करें। चयन करेंब्यूटबक्स्ट (उप-पाठ)? – bearaman

+0

@bearaman हां, एक बार जब आप अपनी कक्षा के लिए उपयोग कर रहे हैं, तो आपको इसे सामान्य के अनुसार चयन तत्व से कॉल करना चाहिए –

0

आप एक सरल HTML पृष्ठ में समस्या को पुन: आप निश्चित रूप से एक बग रिपोर्ट प्रस्तुत करना चाहिए कर सकते हैं।

source codeSelectByText को देखते हुए यह पहली करता है:

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

और यह कुछ भी नहीं मिल रहा है, तो यह करता है:

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

तो सिद्धांत रूप में यह काम करना चाहिए। आप स्वयं XPath के साथ भी खेल सकते हैं और देख सकते हैं कि आप इसे अपने मामले में काम करने के लिए प्राप्त कर सकते हैं या नहीं।

+0

धन्यवाद: मैंने इसके लिए एक कामकाज लिखा (अन्य उत्तर देखें)। –

संबंधित मुद्दे