Название класса соединения Python selenium не разрешено [дубликат]

Когда ES6 теперь широко поддерживается, лучший ответ на этот вопрос изменился. ES6 предоставляет ключевые слова let и const для этого точного обстоятельства. Вместо того, чтобы возиться с закрытием, мы можем просто использовать let для установки переменной области цикла таким образом:

var funcs = [];
for (let i = 0; i < 3; i++) {          
    funcs[i] = function() {            
      console.log("My value: " + i); 
    };
}

val затем укажет на объект, специфичный для этого конкретного поворота цикл, и вернет правильное значение без дополнительной записи закрытия. Это явно значительно упрощает эту проблему.

const аналогично let с дополнительным ограничением на то, что имя переменной не может отскочить к новой ссылке после первоначального присваивания.

Поддержка браузера теперь предназначена для тех, кто ориентирован на последние версии браузеров. const / let в настоящее время поддерживается в последних версиях Firefox, Safari, Edge и Chrome. Он также поддерживается в узле, и вы можете использовать его в любом месте, используя инструменты построения, такие как Babel. Вы можете увидеть рабочий пример здесь: http://jsfiddle.net/ben336/rbU4t/2/

Документы здесь:

Остерегайтесь, однако, что поддержка IE9-IE11 и Edge до Edge 14 let, но получим неверное (они не создают новый i каждый раз, поэтому все вышеперечисленные функции будут записывать 3, как если бы мы использовали var). Edge 14, наконец, получает это право.

14
задан jake wong 12 June 2016 в 07:01
поделиться

2 ответа

Комментарий Леона приводит к правильной информации о том, что сложные имена классов больше не поддерживаются. Вместо этого вы можете попробовать использовать селектора css. В вашем случае следующая строка кода должна помочь вам получить нужный элемент:

el3 = driver.find_element_by_css_selector(".action-btn.cancel.alert-display")

Он находит элемент со всеми тремя классами (action-btn, cancel и alert-display) в классе атрибут. Обратите внимание, что порядок классов здесь не имеет значения, и любой из классов может появляться в любом месте атрибута класса. Пока элемент имеет все три класса, он будет выбран. Если вы хотите, чтобы порядок классов был исправлен, вы можете использовать следующий xpath:

el3 = driver.find_element_by_xpath("//*[@class='action-btn cancel alert-display']") 
24
ответ дан Community 25 August 2018 в 08:26
поделиться

Я опаздываю на этот вопрос. Но я также нашел работу, рассматривая сложные классы как String, используя tag_name и get_attribute ('class'), когда вы не знакомы с Xpath. Ему нужны еще несколько строк кода, но он прямолинейный и подходит для начинающих, таких как я.

   elements = driver.find_elements_by_tag_name('Tag Name Here')
        for element in elments:
            className = watchingTable.get_attribute('class')
            print(className)
                if className == 'Your Needed Classname':
                    #Do your things
2
ответ дан William Tong 25 August 2018 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: