2011-07-04 14 views
17

मैं पहली बार सेलेनियम का उपयोग कर रहा हूं और विकल्पों से अभिभूत हूं। मैं फ़ायरफ़ॉक्स में आईडीई का उपयोग कर रहा हूँ।सेलेनियम: आबादी वाले विकल्पों में विकल्पों के लिए कैसे प्रतीक्षा करें?

जब मेरा पृष्ठ लोड होता है, तो बाद में यह एक JSONP अनुरोध के माध्यम से मूल्य प्राप्त करता है, जिसके साथ यह चयन में विकल्पों को पॉप्युलेट करता है।

आगे बढ़ने से पहले उपस्थित होने के लिए चयन में एक निश्चित विकल्प की प्रतीक्षा करने के लिए सेलेनियम कैसे प्राप्त करूं?

उत्तर

1

मुझे लगता है कि आपको चाहिए का उपयोग किया जा

waitForElementPresent आदेश। यदि संभव हो तो मुझे अपना सेलेनियम आईडीई कोड देखने दो।

2

आप "WaitForSelectOption" कमांड जहां अपने मूल्य प्रत्यक्ष लेबल किया जा सकता है का उपयोग लक्ष्य तरह लेबल = 1 की बचत खाता ऑब्जेक्ट id

+0

बढ़िया काम करता है का उपयोग करते हुए जब आप बस तक इंतजार करना चाहते हैं आपको चुनिंदा तत्व में पॉप्युलेट विकल्प मिलता है। –

13

मैं waitForElementPresent इस्तेमाल किया एक सीएसएस लक्ष्य साथ होगा कर सकते हैं।

उदाहरण: के लिए

<select id="myselect"></select> 

साथ

<option value="123">One-two-three</option> 

उपयोग से भरा जा करने के लिए इंतजार करने के लिए

  • कमान: waitForElementPresent
  • लक्ष्य: css=#myselect option[value=123]
  • मूल्य: (इसे खाली छोड़ दें)
0

मैंने सी # में निम्न कार्य किया है जो पॉप्युलेट होने पर चयन करता है।

आप तत्व को खोजने के लिए एक से पारित करने के लिए है और आप एक विशिष्ट समय प्रतीक्षा करने के लिए के लिए यह भरे जाने के लिए:

public static SelectElement FindSelectElementWhenPopulated(this IWebDriver driver, By by, int delayInSeconds) 
    { 
     WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(delayInSeconds)); 
     return wait.Until<SelectElement>(drv => 
     { 
      SelectElement element = new SelectElement(drv.FindElement(by)); 
      if (element.Options.Count >= 2) 
      { 
       return element; 
      } 

      return null; 
     } 
     ); 
    } 

मेरे मामले में मैं मान्य था चुनिंदा अधिक से अधिक 2 विकल्प हैं, आप कर सकते हैं कोड को बदलें ताकि वह आपकी आवश्यकताओं के अनुरूप मात्रा को मान्य कर सके।

1

हमें ऐसी ही समस्या थी जहां ड्रॉप डाउन के विकल्प किसी तृतीय पक्ष सेवा से प्राप्त किए गए थे, जो कभी-कभी धीमे ऑपरेशन थे।

Select select = new Select(driver.findElement(cssSelector("cssSelectorOfSelectBox")));  
waitUnitlSelectOptionsPopulated(select) 

यहाँ waitUnitlSelectOptionsPopulated

के लिए परिभाषा है
private void waitUntilSelectOptionsPopulated(final Select select) { 
      new FluentWait<WebDriver>(driver) 
        .withTimeout(60, TimeUnit.SECONDS) 
        .pollingEvery(10, TimeUnit.MILLISECONDS) 
        .until(new Predicate<WebDriver>() { 
         public boolean apply(WebDriver d) { 
          return (select.getOptions().size() > 1); 
         } 
        }); 
     } 

नोट:। Select.getOptions का एक चेक() आकार के रूप में हम हमेशा प्रदर्शित एक स्थिर विकल्प था()> 1 हमारे मामले में की जरूरत थी।

+0

आप कक्षाओं का चयन कैसे प्राप्त करते हैं? क्या यह किसी अन्य सेलेनियम Nuget पैकेज से है? – stian64

0

मेरे लिए इसका काम:

WebElement element = driver.findElement(By.xpath("//select[@name='NamE']/option[1]")); 
    return element.getAttribute("text"); 
0

मैं की तरह काम कुछ पाया:

wait.until(
    ExpectedConditions 
     .presenceOfNestedElementsLocatedBy(By.id(<selectioNId>), By.tagName("option")) 
) 
0

जावा 8Awaitility

Awaitility.await() 
.atMost(5, TimeUnit.SECONDS) 
.until(() -> select.getOptions().size() > 0); 
संबंधित मुद्दे