相关疑难解决方法(0)

不允许使用Selenium Compound类名

我有下面的代码点击一个元素来弹出一个屏幕并复制其中的文本

el1 = driver.find_element_by_id("keyDev-A")
el1.click()
el2 = driver.find_element_by_class_name("content")
print(el2.text)
Run Code Online (Sandbox Code Playgroud)

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

el3 = driver.find_element(By.CLASS_NAME, "action-btn cancel alert-display")
el3.click()
Run Code Online (Sandbox Code Playgroud)

它会产生一条错误消息: 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>
Run Code Online (Sandbox Code Playgroud)

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

python selenium

26
推荐指数
1
解决办法
3万
查看次数

webdriver的官方定位策略

官方W3c webdirver文档中,明确指出位置策略是:

State   Keyword
CSS selector    "css selector"
Link text selector  "link text"
Partial link text selector  "partial link text"
Tag name    "tag name"
XPath selector  "xpath"
Run Code Online (Sandbox Code Playgroud)

但是,Selenium的电线协议允许:

class name  
css selector
id  
name
link text
partial link text
tag name
xpath
Run Code Online (Sandbox Code Playgroud)

在理论中,Selenium的文档已经过时,"真实"的故事在新的规范文档中.然而...

我在最新的Chrome自己的Webdriver上运行了一些测试,我可以确认这一点,name并且class name两者都有效; 但是,它们不符合规格.

我记得在Chromium问题上阅读他们只会实现官方的Webdriver规范.

现在:我知道通用答案,其中"规格并不总是100%遵循"等.但是,我想知道的是:

  • 你能找到Chromium中实现这个的代码吗?(链接将是最受欢迎的)
  • 在Chromium邮件列表中是否有关于这些的讨论?
  • "非官方"命令("旧"硒规格文件中记录的)可能会留下来吗?你在哪里读到的?

javascript selenium google-chrome chromium chrome-web-driver

12
推荐指数
1
解决办法
5128
查看次数

什么是硒,什么是WebDriver?

什么是硒?

当您打开Selenium的官方页面时,您首先读到的是“什么是Selenium?”中的“ Selenium automates browser”。部分。“硒的哪个部分适合我?”部分 下面提供了Selenium WebDriver和Selenium IDE之间的选择。据此,我推断出Selenium是工具的集合,该集合包括IDE,WebDriver API(语言绑定),Grid,Selenium Standalone Server,浏览器驱动程序。必须下载适当的文件才能构建项目。

什么是WebDriver?

WebDriver是一个API。它用多种语言编写,这些语言称为语言绑定。API具有控制浏览器的功能。您可以使用这些功能编写脚本来以所需的方式(测试用例)控制浏览器。

这就是我所知道的。如果我错了,请纠正我。我想从面试的角度知道这两个问题的答案。

selenium webdriver selenium-webdriver

4
推荐指数
2
解决办法
602
查看次数

如何使用 Selenium 和 Python 定位具有多个类名的元素

我试图单击以下类名 equals 的元素"clean right"

<li class="clean right"></li>
Run Code Online (Sandbox Code Playgroud)

我怎样才能通过使用找到它driver.find_element_by_class_name()

python selenium xpath classname css-selectors

3
推荐指数
1
解决办法
8575
查看次数

选择器无效:使用Webdriver和Python的find_element_by_class_name不允许使用复合类名

我正在尝试通过webWhatsapp从聊天中打印我的消息之一。

我可以通过“控制台”选项卡中的Javascript完成此操作

recived_msg = document.getElementsByClassName('XELVh selectable-text invisible-space copyable-text') // returns an array of the chat
recived_msg[5].innerText // shows me the 4th message content
Run Code Online (Sandbox Code Playgroud)

问题是我试图在python上做同样的事情,但对我不起作用。

这是我尝试过的:

from selenium import webdriver
recived_msg = driver.find_element_by_class_name('XELVh selectable-text invisible-space copyable-text')
final = recived_msg[5].innerText #doesnt work for some reason
Run Code Online (Sandbox Code Playgroud)

我遇到的错误是:消息:无效的选择器:不允许使用复合类名

我对javascript有点陌生,所以很抱歉造成误会,并感谢您的帮助!:)

xpath webdriver css-selectors python-3.x selenium-webdriver

1
推荐指数
1
解决办法
815
查看次数