2016-03-20 16 views
1

Tıklamak istediğim link kullanıcı tarafından giriliyor. Örneğin değişken pist için kullanıcı girişi, "Tampa Bay Downs"Bağlantıyı kullanıcı giriş metniyle eşleştirerek bir angularjs bağlantısına tıklamak için Python ve Selenium'u nasıl alabilirim?

aşağıdaki kodu arayacaktır My piton selenyum test programı:

<a ng-click="updateFavorite()(raceInfo.trackAbbr); $event.stopPropagation();">EV 
    i class="my-icon-favorite-fill my-icon-favorite-fill_active" ng-class="{ 
    'my-icon-favorite-fill' : !showActionFeedback, ...onFeedback, 'rotating spinner' : 
    showActionFeedback}" update-favorite-action-feedback="" qa-label="race-favorite-icon"> 
    ::before 
    </i> 
</a> 
<span class="ng-binding" ng-bind="::raceInfo.trackName" qa-label="race-track-name"> 
Tampa Bay Downs</span> 
</td> 

başarılı kod giriş sözcükleri bulur "Tampa Bay Downs "ve sonra ayrı bir sayfanın açılmasına neden olacak bir angularjs eylemini etkinleştirmek için tıklayın, bu istenen eylemdir.

Bağlantıyı doğru şekilde xpath kullanarak bulmayı denedim.
Ben de hiçbir başarı ile denedim:

try: 
    element = driver.find_element_by_css_selector("a[qa-label="+track+"]") 
except: 
    print "error finding css selector for track" 
+0

xpath ile "// span [içerir (., '{}')]/Önceki-kardeş" a ".format (track)" veya daha spesifik olması için sınıf adını kullanabilirsiniz. " // span [@ qa-label = 'yarış-iz-adı' ve (., '{}')]/önceki-kardeş :: a ".format (parça)' içerir –

+0

Ayrıca ifadeler dışında battaniye kullanmayın ne beklediğini yakala. –

+0

Hızlı yanıt (ve öneri) Padraic için teşekkürler, şimdi bir deneyin. – klitz1967

cevap

1
Sen Tampa Bay Downs yani parça adını içeren aralık etiketinin önce a bulmak için-kardeş önceki bir xpath kullanılarak kullanarak seçebilirsiniz

:

"//span[contains(.,'{}')]/preceding-sibling::a".format(track) 

ya da daha özel olarak yayılma sınıfı adı kullanılarak:

"//span[@qa-label='race-track-name' and contains(.,'{}')]/preceding-sibling::a".format(track) 
İlgili konular