2013-10-29 39 views
5
ile temas elemanları

Bir HTML div etiketine sahibim ve divun içinde, farenin sınırlarını girdiğinde görünen bir öğe var. Şimdi, fare girerken veya gezinirken görünür hale gelen öğeye tıklamak istiyorum.Selenium IE

Sorun: öğe yanıp sönmeye başlar. Tarayıcı: IE8

Ben

IWebElement we = addToBasket.FindElement(By.Id("MyBox")); 
    action.MoveToElement(we).MoveToElement(driver.FindElement(By.Id("plus-icon"))).Click().Build().Perform(); 

onun yanıp neden Herhangi bir öneri aşağıdaki kodu kullanıyorum?

+0

Hangi sürümü selenyum kullanıyorsunuz? – Karthikeyan

+0

IE11 hala bu sorundan muzdarip. Neyse ki, aşağıdaki çözüm hala çalışıyor :). –

cevap

17

Öğe, "kalıcı anlaşmalar" adı verilen IE sürücüsünün bir özelliği nedeniyle yanıp sönüyor. Bu özellik şüpheli bir değerdir, ancak SendMessage API'sini kullanırken Beyin (tarayıcı değil, sürücü) responds to WM_MOUSEMOVE messages beyin ölü yolundan dolayı gereklidir.

Birkaç seçeneğiniz var. Aşağıdaki gibi kodu kullanarak kapalı kalıcı fareyi üzerine kapatabilirsiniz: Bu Yayının üzerine çalıştığınızda fiziksel fare imleci ekranda olduğu kaprislerine almanıza neden olacağı olsa

InternetExplorerOptions options = new InternetExplorerOptions(); 
options.EnablePersistentHover = false; 
IWebDriver driver = new InternetExplorerDriver(options); 

, farkında olun. Bu kabul edilebilir değilse, alabileceğiniz bir couple of other approaches var. İlk olarak, sürücünün yalnızca sentezlenmiş JavaScript olaylarına güvenmesine neden olacak "yerel olaylar" olarak adlandırılanları kapatabilirsiniz. Bu yaklaşımın, yalnızca fare olaylarını sentezlemek için JavaScript'e dayanması nedeniyle kendi tuzakları vardır.

InternetExplorerOptions options = new InternetExplorerOptions(); 
options.EnableNativeEvents = false; 
IWebDriver driver = new InternetExplorerDriver(options); 

Son olarak, daha doğru SendInput API kullanan kod varsayılan SendMessage, Windows API kullanarak göç edebilecek. Bu, RequireWindowFocus özelliği ile yapılır. Bunun dezavantajı, fare girişinin sistemde çok düşük bir seviyede enjekte edilmesidir; bu, IE penceresinin sistemde ön plan penceresi olmasını gerektirir.

Son bir not olarak, bu özelliklerin tümünü bir kerede ayarlamaya çalışmayın; Bir yaklaşım seçin ve onunla sopa. Bunların birçoğu karşılıklı olarak münhasırdır ve aralarındaki etkileşim tanımlanmamıştır.

+0

Teşekkürler Jim. Yukarıdaki seçeneği kullanın yanıp sönme durdu. ama sonra dediğin gibi fareyi fiziksel olarak tutmam gerekiyordu. Dava için uygun bir çözüm buldum. http://code.google.com/p/selenium/wiki/InternetExplorerDriver. Burada testi çalıştırırken, fare kursunu tarayıcının sınırları içinde tuttuklarını söylerler. Bu yanıp sönme durdu ve ben elemanın üzerine tıkladım. – Aman

+0

Bunu uygun cevap olarak işaretlemek için çekinmeyin, o zaman. – JimEvans

+0

Selenium 2.47.1'den itibaren API değişti. Şimdi ieCapabilities.setCapability (InternetExplorerDriver.NATIVE_EVENTS, false); –

0

Bu benim için çalıştı.

WebElement element = driver.findElement(By.xpath("element xpath")); 
Locatable hoverItem = (Locatable) element; 
Mouse mouse = ((HasInputDevice) driver).getMouse(); 
mouse.mouseMove(hoverItem.getCoordinates());