2013-05-29 25 views

cevap

9

select HTML öğeleri (yani DROPDOWNS) için özel olarak oluşturulmuş bir sınıfı vardır.

O OpenQA.Selenium.Support.UI isim alanı içinde SelectElement sınıftır.

Bu, kullanıcıların select öğesinde kullandıkları/etkileşim kurdukları ortak şeylere kolay erişim sağlayan, select öğelerinin etrafındaki sarıcıdır.

Kişisel örneği (Ben LINQ kullanıyorum, çünkü yukarıdaki C# 3 veya kullanarak) çevrilmesi söz konusuydu:

IList<IWebElement> selectElements = driver.FindElements(By.TagName("select")); 
var displayedSelectElements = selectElements.Where(se => se.Displayed); 

Bu kod ne yaptığını bilmek önemlidir. İlk olarak tümselect öğelerini bulur ve bunları yeni bir listeye yerleştirir.

Daha sonra görüntülenir sadece select elemanlarına, bu filtreleyecektir.END_ITEMEND_UNORDERED_LIST, bu onların .Displayed mülkiyet gerçek olduğunu vardır. Bu, örnek kodunuzun doğrudan çevirisi.

Ancak, gerçekten ne yapmaya çalışıyorsun ne belirtilmemiş ettik ve örnek olarak bu daha uygun olur:

var selectElement = new SelectElement(driver.FindElement(By.Id("something"))); 
var displayedOptions = selectElement.Options.Where(o => o.Displayed); 

üstünde bir belirliselect unsurları bulacağını ve filtre içindeki seçenekleri select sadece görüntülenenler içindir. Yine gerçek olarak .Displayed özelliğine sahipler.

Yukarıdaki kod yana Düzenleme

ne ihtiyaç vardır, ancak bir for döngü şeklinde benzer bir şey gibi görünür istiyorum: ReadOnlyCollection döndüren

var selectElement = new SelectElement(driver.FindElement(By.Id("something"))); 
var allOptions = selectElement.Options; 

for (int i = 0; i < allOptions.Length; i++) 
{ 
    if (allOptions[i].Displayed) 
    { 
     // do something 
     // like add to a new list? 
    } 
} 
+0

kullanın. Teşekkürler. – jessica

+0

Ancak foreach yerine C# için aynı formatı kullanabilir miyim? – jessica

+0

@jessica, kesinlikle yayınlamamı - açıkça belirtilmemişse bana bildirin. – Arran

1

FindElements. senin SVG verileri bu gibi görünüyorsa Yani onun daha iyi

ReadOnlyCollection<IWebElement> displayedOptions = driver.FindElements(By.TagName("select")); 

for (WebElement option : displayedOptions) 
{ 
    if (option.displayed) 
    { 
    //displayedOptions.Add(option); //You can't do that 
    // do something else 
    } 
} 
0

tanımlamak için:

<div id="content-data" class="col-md-12" style="height:666px;"> 
    <svg id="pie-draw-488172" width="492" height="616"><g transform="translate(226,318)"> 
    <text id="pie-text" cursor="default" y="-226" x="241">Compute (227,311)</text> 
    <text id="pie-text" cursor="default" y="-211" x="241">Database (98,005)</text> 
    <text id="pie-text" cursor="default" y="-196" x="241">Storage&amp;Content Delivery (69,436)</text> 
    <text id="pie-text" cursor="default" y="-181" x="241">Networking (30,874)</text> 
    <text id="pie-text" cursor="default" y="-166" x="241">Other (11,273)</text> 
    </svg> 
</div> 

sonra senin ikinci kod benim için çalışıyor bu

public List<IWebElement> content_data = new List<IWebElement>(); 
content_data = driver.FindElement(By.Id("content-data")).FindElements(By.TagName("text")).ToList(); 
İlgili konular