2016-12-06 3 views
1

Ich habe mehrere Code-Schnipsel ausprobiert, die ich nicht gefunden habe, hat den Job für mich getan. Auch inspiziere ich und fand, dass das Element, das versucht zu wählen ist, ID hat soPython Selenium zur Auswahl eines Kontrollkästchens auf der dynamischen Webseite

hat nicht funktioniert. Ich ahd auch versucht

find_element_by_xpath and find_elements_by_name

Nicht von ihnen arbeitete. Ich möchte auf this website

eine Checkbox auswählen können, Mein Code sieht wie folgt aus:

from selenium.webdriver.common.keys import Keys 

url = "the web page above" 

# Creates an instance driver object for chrome browser... 
driver = webdriver.Chrome() 

# Get the url 
driver.get(url) 
driver.maximize_window() 

# Find list elements by id and click/select on it.... 
driver.find_element_by_xpath(".//*[contains(text(), 'Osborne & Little')]").click() 
+0

Ich habe versucht, Ihren Code. Der xpath wäre besser so: '" //*[text()[enthält(.,'Osborne & Little ')]] "Aber dann wäre es eine Liste, da der Titel auch den Text enthält, wenn es gab jedes Element zurück. Dies ist nicht der Fall, diese Radioboxen sind irgendwie nicht erreichbar. Ein einfacher '" // Eingang [@ type = 'radio'] "' gibt nur 5 Elemente zurück, also musst du einen anderen Weg finden, sie zu erreichen ... – monami

+0

Ich habe deinen xpath versucht, ich bekomme immer noch diesen Fehler: ElementNotVisibleException : Nachricht: Element nicht sichtbar (Sitzungsinfo: chrome = 54.0.2840.99) (Treiberinfo: chromedriver = 2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed), Plattform = Windows NT 6.1.7600 x86_64) –

+0

Welcher? Das ist ein besseres Ergebnis, ich habe nur den Titel zurückbekommen. Ich glaube nicht, dass die Wartevorschläge helfen werden, weil ich es auch mit Warten versuchte, und diese Radioboxen wurden nach einigen Sekunden nicht zurückgegeben, aber vielleicht solltest du es versuchen. – monami

Antwort

0

Sie verwenden XPath falsch. Zum Chrom-> inspect-> cmd + F Sie in Xpath setzen können versuchen, zu testen Element Auswahl

Geben Sie hier ein Beispiel

 <span class="tss-label tss-label--hierarchy ng-binding" ng-class="displayRow[instance.item.id] ? 'tss-hierarchy__selectedStateText' : ''" ng-bind="instance.item.alias" title="Node-1: Instance #1 - d07f2ec4-71f1-4ae0-81c6-955c86e14c6e">Node-1: Instance #1</span> 

kann durch

 xpath "//*[contains(@title,'Node-1: Instance #1')] 
+0

Können Sie bitte den kompletten Code eingeben? –

0

ausgewählt werden Nach this müssen Sie alle Elemente finden, die Sie brauchen, um darauf zu klicken und sie bis zum Ende iterieren, das Beispiel ist mit Java, aber ist das gleiche Prinzip

Für Ihr spezielles Problem können Sie die nächste, oder Sie können mit XPath vereinfachen, aber dies ist ein Beispiel, das für Ihr spezielles Problem funktionieren würde

WebDriver driver = new FirefoxDriver(); 
    driver.get("http://www.osborneandlittle.com/products-and-collections/fabric"); 
if (driver.findElements(By.partialLinkText("Osborne & Little")).isEmpty()) { 
    new WebDriverWait(
      driver, TIME_TO_WAIT).until(
        ExpectedConditions.presenceOfElementLocated(
          By.name("brand"))); 
    List<WebElement> elements = driver.findElements(By.tagName("label")); 

    for (int i = 0; i < elements.size(); i++) { 
     String textInCurrentlabel = elements.get(i).getText(); 
     if (textInCurrentlabel.equals("Osborne & Little")) { 
     elements.get(i).click(); 
     break; 
     } 
    } 
    } 
+0

Können Sie bitte mit einem Code-Snippet besser erklären? –

+0

Hi Umar, ich bearbeite nur meine Antwort, hoffe es hilft – jam

0

Meiner Meinung nach von Ihnen die XPath ist falsch angeben, aber unter der Annahme, dass es korrekt ist und dass deins ein Ladeproblem ist, weil du versuchst, das Element zu durchsuchen, bevor es geladen ist, probiere das aus und lass es mich wissen, in jedem Fall wenn du mir mehr Details wie die URL und das Element gibst, das ich brauche kann Ihnen helfen mehr:

from selenium.webdriver.common.keys import Keys 
import time 

url = "the web page above" 

# Creates an instance driver object for chrome browser... 
driver = webdriver.Chrome() 

# Get the url 
driver.get(url) 
driver.maximize_window() 

# Find list elements by id and click/select on it.... 
#wait the item is loaded 
i=0 
while i<1: 
    try: 
     driver.find_element_by_xpath(".//*[contains(text(), 'Osborne & Little')]").click() 
     i=1 
    except: 
     time.sleep(1) 
     i=0 

für sicher sein, dass Sie einen korrekten X-Pfad verwenden, öffnen Sie die URL mit Firefox und installieren Sie die Plug-in Firebug und Feuerweg

Verwandte Themen