Siz değilsiniz. JQuery seçicileri, CSS 2 ve CSS 3 seçmenlerinin çoğunu sunar, artı bir şey daha sunar, ancak muhtemelen onsuz yaşayabilirsiniz. JQuery seçicilerini biliyorsanız, CSS seçicilerini zaten biliyorsunuz.
Yeterli olmayan yerlerde (daha kuvvetli) XPath ifadelerini kullanabileceğiniz ve kullanabileceğiniz CSS seçicilerini kullanın. Bu ikisinin yeterli olmadığı pek çok gerçek kullanım bulacağınızdan şüpheliyim (ve daha sonra, olağan yaklaşımı elde edebileceğiniz sonuçlara ulaşmak ve sonuçları manuel olarak filtrelemek). Eğer sadece bir veya iki tarayıcıları desteklemek istiyorsanız o tarayıcıya basit addon yazmak için
, en kolay yolu olabilir:
muhtemelen de JQuery seçicileri kabul etmeye WebDriver zorlayacağını söyledi That Zaten mevcut değilse JQuery'yi her sayfaya enjekte eder. Ardından, kullandığınız tarayıcı tarafından kullanılacak bu eklentiyi zorlarsınız. Eğer tarayıcıların tüm desteklemek istiyorsanız
, o çözüm hızlı bir yük haline gelir ve yapabileceğinin en iyisi herhangi findElements()
ve/veya executeScript()
çağrı önce sayfanın içine JQuery enjekte etmeye çalışacağını WebDriver için bir dekoratör yazmaktır eğer zaten mevcut değilse.
JQuery'yi enjekte etme hakkında fikir sahibi olmak için this question numaralı telefona bakın.
bunu enjekte sonra, sadece JavaScript aracılığıyla yine kullanabilirsiniz:
// earlier
if (driver instanceof JavascriptExecutor) {
js = (JavascriptExecutor)driver;
} else {
throw new IllegalStateException("This driver cannot run JavaScript.");
}
WebElement element = (WebElement)js.executeScript("$('div.account').get(0)");
// or
List<WebElement> elements = (List<WebElement>)js.executeScript("$('div.account').get()");
kolayca dekore WebDriver için yeni By
nesnesine bu satırları kaydırmak veya yeni findElement(String jQuerySelector)
yöntem olabilir istediğiniz, ama bu size kolaylık ve tembellik kalmış ise, bunun ByJQuery
denilen
iyi yaklaşım, bence, yeni bir By
uygulanmasını oluşturmak olacaktır ... çalışma var. ByJavaScript
'un nasıl yapılacağı hakkında this answer'a bakın. Yeniden kullanmak için JQuery'yi sayfaya enjekte etmek ve gerçek sorguyu çalıştırmak için küçük bir adımdır.
class ByJQuery extends By implements Serializable {
private final String query;
public ByJQuery(String query) {
checkNotNull(query, "Cannot find elements with a null JQuery expression.");
this.query = query;
}
@Override
public List<WebElement> findElements(SearchContext context) {
WebDriver driver = getWebDriverFromSearchContext(context);
if (!isJQueryInThisPage(driver)) {
injectJQuery(driver);
}
return new ByJavaScript("return $(" + query + ")").findElements(context);
}
private static WebDriver getWebDriverFromSearchContext(SearchContext context) {
if (context instanceof WebDriver) {
return (WebDriver)context;
}
if (context instanceof WrapsDriver) {
return ((WrapsDriver)context).getWrappedDriver();
}
throw new IllegalStateException("Can't access a WebDriver instance from the current search context.");
}
private static boolean isJQueryInThisPage(WebDriver driver) {
// TODO Some JavaScript test for a JQuery object.
}
private static void injectJQuery(WebDriver driver) {
// TODO Load JQuery from a file, inject it into the page via JS.
}
@Override
public String toString() {
return "By.jQuery: \"$(" + query + ")\"";
}
}
Seçicilerin farklı bir çerçeve üzerinde değiştiğini sanmıyorum. Aynı –
da olur. Ama benim seçicimin bir kısmı xpath kullanıyor, id tüm tarayıcıları çalışmıyor. ve ben googled ve bilgi aldım. JQUERY kullanarak tüm sorunları çözecektir. Bu yüzden Javascriptexecutor öğrenmeyi düşündüm –
Googling size ne anlattı? Ben google "selenium jquery" ve bir dizi sonuç, özellikle yığın taşma mesajlarının bir dizi ve b) Neden jQuery kullanmanız gerekir? Bazı durumlarda anlıyorum, ancak vakaların% 99'unda, yerel yer belirleyicilerinden uzaklaşmalısınız. Ne çalışmıyor? Niye ya? Nasıl çalışmıyor? CSS ve XPath seçicilerini denediniz mi? Eğer evetse, neden işe yaramadılar? Ne kullandın Bize biraz kod göster. Ne yanlış gitti. Nasıl yanlış gitti. Ne olmasını bekliyordun? – Arran