硒化合物类名

我有下面的代码,单击一个元素可以弹出一个屏幕并在其中复制文本


el1 = driver.find_element_by_id("keyDev-A")

el1.click()

el2 = driver.find_element_by_class_name("content")

print(el2.text)

但是,当我尝试selenium单击该弹出窗口中的按钮时,


el3 = driver.find_element(By.CLASS_NAME, "action-btn cancel alert-display")

el3.click()

它产生一条错误消息: invalid selector: Compound class names not permitted


这是我selenium要单击的HTML 。该Close按钮。


<div class="nav">

    <span class="action-btn confirm prompt-display">Confirm</span>

    <span class="action-btn cancel prompt-display">Cancel</span>

    <span class="action-btn cancel alert-display">Close</span>

</div>

我应该怎么写el3才能单击关闭按钮?


慕勒3428872
浏览 299回答 3
3回答

德玛西亚99

Leon的评论提出了正确的信息,即不再支持复合类名称。相反,您可以尝试使用CSS选择器。就您而言,以下代码行应帮助您获取所需的元素:el3 = driver.find_element_by_css_selector(".action-btn.cancel.alert-display")它在class属性中找到具有所有三个类(action-btn,cancel和alert-display)的元素。请注意,这里的类顺序无关紧要,任何类都可以出现在class属性中的任何位置。只要元素具有所有三个类,就将其选中。如果您希望固定类的顺序,则可以使用以下xpath:el3 = driver.find_element_by_xpath("//*[@class='action-btn cancel alert-display']")&nbsp;

慕工程0101907

这个问题我来晚了。但是,当您不熟悉Xpath时,也可以通过使用tag_name和get_attribute('class')将复合类作为String来处理,从而找到了解决方法。它需要更多的代码行,但是很简单,适合像我这样的初学者。&nbsp; &nbsp;elements = driver.find_elements_by_tag_name('Tag Name Here')&nbsp; &nbsp; &nbsp; &nbsp; for element in elments:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; className = watchingTable.get_attribute('class')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(className)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if className == 'Your Needed Classname':&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #Do your things

白板的微信

使用这种方式一会儿之后。我发现这可能不是一个好的解决方案。因为当TagName为'DIV'或'SPAN'时,每次尝试查找太重的元素时都必须遍历整个文档。此外,在页面加载时,您可能必须添加一些Try Except错误句柄以摆脱烦人的异常。了解并熟悉sagarwadhwa1的答案表明这将是一个很好的实践
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python