2016-04-18 11 views
1

Die HTML ist wie folgt zu wählen:Wie Python und Selen verwenden, um eine ExtJS Taste

<div id="button-1600" class="x-btn x-box-item x-toolbar-item x-btn- default-small x-noicon x-btn-noicon x-btn-default-small-noicon" style="border-width: 1px; left: 109px; margin: 0px; top: 0px;"> 
<em id="button-1600-btnWrap"> 
<button id="button-1600-btnEl" class="x-btn-center" autocomplete="off" role="button" hidefocus="true" type="button" style="height: 14px;"> 
<span id="button-1600-btnInnerEl" class="x-btn-inner" style="">QA View</span> 
<span id="button-1600-btnIconEl" class="x-btn-icon "></span> 
</button> 

Ich brauche den Button "QA View" zu wählen. Da unsere Software extJS verwendet, ändert sich die ID # (1600) jedes Mal, wenn die Seite geladen wird. Ich versuchte, die langen XPath wie folgt:

DP_DEALER_SEARCH_QA_VIEW = 'html/body/div[1]/div[3]/div/div/div[2]/div/div/div/div/div/div[2]/em/button' 

def click_dealerSearchQAView(self): 
    webQABtn = WebDriverWait(self.driver, 10).until(
     ec.element_to_be_clickable((By.XPATH, DP_DEALER_SEARCH_QA_VIEW))) 
    webQABtn.click() 

Ich weiß, es gibt Möglichkeiten, dieses Element zu finden, die kürzere XPath-Methode und Dinge wie [Enthält], aber ich habe nicht in der Lage gewesen, es herauszufinden . Jede Hilfe wird sehr geschätzt.

Antwort

2

Sie können wählen von Text:

//button[. = "QA View"] 

Oder, um eine zusätzliche übergeordnete Kontrolle:

//div[starts-with(@id, "button-")]//button[. = "QA View"] 
+0

ich in der Lage war es durch den Text auszuwählen, was sehr nützlich ist. Ich werde wahrscheinlich den Eltern-Check auf lange Sicht integrieren. Es lässt mich deine Antwort noch nicht markieren, aber es hat funktioniert. Vielen Dank! –