2016-08-05 21 views
0

Es gibt einfachen Code, der für die Drop-Down-Liste warten Sie auf Seite angezeigt:Warum funktioniertElementPresent nicht?

var By = this.webdriver.By; 
var driver = this.driver; 
var bySelector = By.xpath('//*[@id="searchForm"]//*[@class="autocomplete-suggestions autocomplete-suggestion-withgroup"]'); 
return driver.wait(() => { 
    driver.isElementPresent(bySelector); 
    }, 6000) 
    .then((bool) => { 
     assert.isTrue(bool); 
    }); 

Dieser Code gibt mir eine Fehlermeldung: Error: Wait timed out after 6011ms

Es gibt ein Element Eigenschaften: here

Nach ckicking auf Suchfeld Stil Eigenschaft display: dieses Elements ändern auf none zu block. Ich kann auch nichts in Elternelementen sehen, was dieses Element unsichtbar macht. Ich verstehe nicht wirklich, was ich falsch mache.

Ich muss auf Element in dieser Dropdown-Liste klicken, und jetzt kann ich es nur nach this.driver.sleep(some ms) tun. Aber es schlechte Praxis und ich will verstehen, was ich falsch mache, wenn wait Methode verwenden und immer noch es verwenden. TY.

Antwort

0

Okay, ein Kollege hat mir geholfen, eine Lösung für dieses Problem zu finden. Hier ist sie:

return driver.wait(until.elementLocated(bySelector), 500, 'not found').then((element) => { 
    return driver.wait(until.elementIsVisible(element), 5000, 'not found'); 
}); 

In der Tat, ich verstand nicht, warum in einigen Fällen ausreichend isElementPresent, aber in diesem Fall ist es notwendig, die Expression der beiden Erwartungen zu schreiben. Ich werde es zu schätzen wissen, wenn mir jemand das erklären kann.

0

Ich denke, der XPath, den Sie verwenden, ist falsch. probiere den unteren xapth aus.

var bySelector = By.xpath('//*[@id="searchForm"]/descendant::*[@class="autocomplete-suggestions autocomplete-suggestion-withgroup"]'); 
+0

TY, aber warum denkst du, dass es falsch xpath? Ihr Code gibt mir den gleichen Fehler ..... Tatsächlich versuche ich viele Variation Xpath Ausdruck, aber den gleichen Fehler. – Valentina

+0

@Valentina kann man nicht // in der Mitte von Xpath schreiben. Verwenden Sie Xpath-Achse zum Erkunden Kind/Nachkommen-Elemente –

+0

Alexey, warum denkst du? Eigentlich kann ich diese Syntax verwenden. Es ist ein gültiger XPath-Ausdruck. – Valentina