2011-03-28 32 views
5

Rasgele bir Windows uygulamasında bazı otomasyon yapan bir uygulamam var. Test etmek için Notepad kullanıyorum.UIAutomation ve Uzak Masaüstü Bağlantıları

Bu otomasyon sırasında, koddan olayları çağırmak zorundayım. Şu anda en yaygın, InvokePattern ve ExpandCollapsePattern olduğu için iki tür etkinliği destekliyorum.

Sınama yapmak için masaüstüne uzaktan erişebileceğim bir bilgisayar kullanıyorum. Ama garip. Uzak Masaüstü aracılığıyla bilgisayara bağlandığımda, uygulama iyi çalışıyor. Bilgisayardan çıktığımda, kodum ExpandCollapsePattern (InvokePattern iyi çalışıyor) için çalışmayı durdurur. InvalidOperationException alıyorum.

Belgeler, bunun yalnızca düğümü bir LeafNode olarak işaretlenmişse atılması gerektiğini söylüyor. Uzak Masaüstü'nü InvalidOperationException aldığımdan farklı kılan nedir?

Şu anda bu olayı gerçekleştirmem gereken kod var.

ExpandCollapseState state = 
    patternMenu.Current.ExpandCollapseState; 
if (state == ExpandCollapseState.Expanded) 
    patternMenu.Collapse(); 
else if (state == ExpandCollapseState.PartiallyExpanded || 
     state == ExpandCollapseState.Collapsed) 
    patternMenu.Expand(); 

patternMenu AutomationElement kullanılarak GetCurrentPattern kazanılmış bir ExpandCollapsePattern olup.

ExpandCollapseState'ın geçerli değeri, değeri yazdırdığımda "Daraltılmış" olur.

DÜZENLEME: Neden bir downvote aldığımı ve bunun nasıl kötü bir soru olduğunu anlayabildiğim bir ihtimal var mı? Gerçekten uzak masaüstü kapalı olduğunda başarısız gibi görünüyor, aslında neler olup bittiğini. Eğer bu cevabı bilmem gereken gerçekten aptal bir soru ise, bir açıklama ve daha sonra bir düşüşü çok isterim.

Masaüstüyle etkileşime giren işlem bir Windows servisi değildir. Uzak masaüstünü bilgisayara girdikten sonra başladığım bir uygulamadır. Masaüstüyi kilitlediğimden mi?

Windows makinesinde oturum açmak için Ubuntu'da "Terminal Server Client" kullanıyorum. Bu uygulamadaki kapat düğmesine basmak masaüstünün kilitlenmesine neden oluyor mu?

cevap

2

Genel olarak, etkileşimli olmayan bir masaüstünde genellikle UI Automation veya benzeri çalıştıramazsınız. Etkileşimli olmayan masaüstleri girişle ilgili çeşitli sınırlamalara sahiptir: odaklanmış bir öğe yoktur, giriş gönderilemez, dolayısıyla bunlara bağlı olan her şey başarısız olur.

Windows iletileri gönderme gibi bazı işlevler iyi çalışır. Burada neler olabilir, InvokePattern işlevselliği kapaklar altında iletiler olarak uygulanır, bu yüzden hala çalışır; Ancak, Genişlet/Daralt başarısız olan girdiler açısından uygulanabilir.

Değil net neden senin olayda, bu istemci (bu kısmı bekleniyor) kapattığınızda başarısız fakat uzak masaüstü kendini kilitler çalışıldığında görünür - bu her iki durumda da aynı davranmasını beklersiniz . Bir canlı müşteri var çünkü

(yerel Ubuntu masaüstü kilitleri eğer, tüm iyi olmalı ve hala bu kadar uzun istemci hala çalışıyor gibi çalıştığını unutmayın. Uzak istemci, hala bu durumda 'interaktif' olduğunu İstemcinin kendisinin etkileşimli veya etkileşimli olmayan bir masaüstünde çalışıp çalışmadığına bakılmaksızın - bu kavramlar başka bir işletim sisteminde çalışan bir istemci için bile geçerli olmayabilir!)

+0

Masaüstü kilitlendiğinde iyi çalıştığını düşündüm. , ama yanılmışım.Masaüstü kendini kilitlediğinde en son test sonucu başarısız oldu. Uzak masaüstü kullanmak yerine testleri çalıştırmak için bir VM kurmaya başlayacağım. Teşekkürler. –