2013-03-20 45 views
17

Tôi không thể chọn các tùy chọn trong danh sách thả xuống. Tôi nghĩ rằng tôi cần có .Select hoặc SelectElement, nhưng không có tùy chọn nào như vậy.Chọn từng tùy chọn trong trình đơn thả xuống bằng Selenium WebDriver C#

Mẫu mã:

IWebDriver ffbrowser = new FirefoxDriver(); 
ffbrowser.Navigate().GoToUrl("http://www.amazon.com/"); 
ffbrowser.Manage().Window.Maximize(); 

Thread.Sleep(500); 

IWebElement ddl = ffbrowser.FindElement(By.Name("url")); 
int numofitems = ddl.FindElements(By.TagName("option")).Count; 

for (int i = 1; i < numofitems; i++) 
{ 
    ffbrowser.select("TagName = option", "index = i"); 
} 

Các "chọn" trong "ffbrowser.select" được báo cáo là một lỗi:

Lỗi 1 'OpenQA.Selenium.IWebDriver' không chứa một định nghĩa cho ' chọn 'và không có phương pháp mở rộng' chọn 'chấp nhận đối số đầu tiên của loại' OpenQA.Selenium.IWebDriver 'có thể được tìm thấy (bạn đang thiếu một chỉ thị sử dụng hoặc tham chiếu assembly?)

Tham chiếu dự án của tôi bao gồm Selenium.WebDriverBackedSelenium, Thoughtworks.Selenium.Core, WebDriver, WebDriver.Support

và tôi có

using NUnit.Framework; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 
using OpenQA.Selenium.Firefox; 
using OpenQA.Selenium.IE; 
using OpenQA.Selenium.Support.UI; 
+0

sử dụng IDE Intellisense – MethodMan

+0

bằng cách sử dụng IDE Selenium, nó cho biết phải có một tùy chọn chọn nhưng không có sẵn trong phòng thu trực quan. –

+1

Bạn có một FirefoxDriver vì vậy tôi cho rằng bạn đang sử dụng Selenium WebDriver chứ không phải IDE. – Nashibukasan

Trả lời

26

Tùy phiên bản nào của Selenium WebDriver bạn đang sử dụng bạn có thể sử dụng lớp SelectElement, mà sẽ được đưa vào OpenQA.Selenium.Support.UI.
Ví dụ:

SelectElement selector = new SelectElement(element); 
selector.SelectByIndex(1); 

Trường hợp yếu tố là thả của bạn hộp xuống.

+0

Điều này đã làm cho các trick cho tôi. Cảm ơn. –

+4

Đừng quên 'install-package selenium.support' –

+0

@ChrisS Tại sao khó tìm ra manh mối này. –

1

Dưới đây là ví dụ minh họa tốt hơn cách lấy tất cả các mục trong danh sách thả xuống và chọn một mục từ danh sách thả xuống.

Mã Html mẫu cho danh sách thả xuống

<select> 
    <option>Milk</option> 
    <option>Coffee</option> 
    <option>Tea</option> 
</select> 

Mã dưới đây được tất cả các mục từ danh sách thả xuống ở trên và chọn mục 'Coffee'.Logic của mã này là như sau

Bước 1. Tạo giao diện của thẻ phần tử web Bước 2. Tạo IList với tất cả các phần tử con của thẻ phần tử web Bước 3. Chọn mục Danh sách thả "Cà phê"

using System; 
using System.Collections.Generic; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Firefox; 
using OpenQA.Selenium.Support.UI; 

namespace SeleniumTests 
{ 
    class DropDownListSelection 
    { 
     static void Main(string[] args) 
     { 
      IWebDriver driver = new FirefoxDriver(); 
      driver.Navigate().GoToUrl("http://DropDownList.html"); 
      IWebElement element = driver.FindElement(By.XPath("//Select")); 
      IList<IWebElement> AllDropDownList = element.FindElements(By.XPath("//option")); 
      int DpListCount = AllDropDownList.Count; 
      for (int i = 0; i < DpListCount; i++) 
      { 
       if (AllDropDownList[i].Text == "Coffee") 
       { 
        AllDropDownList[i].Click(); 
       } 
      } 
      Console.WriteLine(DpListCount); 
      Console.ReadLine(); 
     } 
    } 
} 
.210
+0

Điều này có vẻ quá phức tạp so với việc sử dụng lớp SelectElement. Ngoài ra, tôi đã tìm thấy trong một số trường hợp rằng nếu danh sách không được mở rộng, cố gắng 'bấm' một tùy chọn để bạn nhấp vào khoảng trống bên dưới danh sách thả xuống, chọn không có gì. – Nashibukasan

+0

Có SelectElement class là một forward forward cho tất cả các phép toán lựa chọn. Tuy nhiên nếu bạn muốn kiểm tra chéo nội dung trong danh sách Dropdown với dữ liệu kiểm tra của bạn, trước khi bắt đầu thực hiện các thao tác lựa chọn thì tôi nghĩ rằng nó hoạt động tốt. – CheryJose

1

Bạn cũng có thể sử dụng:

new SelectElement(driver.FindElement(By.Id("")).SelectByText("")); 

Hoặc:

new SelectElement(driver.FindElement(By.Id("")).SelectByValue("")); 
0

Sử dụng mã mẫu dưới đây rất đơn giản:

String Input="Value to Select"; 
String xPathVal="@["id=Samplexpath"]"; 
IWebElement TargetElement = driver.FindElement(By.XPath(xPathVal)); 
SelectElement dropdown = new SelectElement(TargetElement); 
dropdown.SelectByText(Input.Trim()); 
0

này hoạt động hoàn hảo ...

SelectElement selector = new SelectElement(element); 
selector.SelectByIndex(1); 

Trường hợp phần tử là hộp thả xuống của bạn.

Các vấn đề liên quan