标签: webdriver-w3c-spec

如何在chromedriver中关闭w3c以解决错误未知命令:在W3C中无法调用非W3C标准命令

在刚刚发布的Chrome版本75中,我们的测试无法正常运行。他们给出了粘贴在下面的堆栈跟踪。我们在带有rspec,selenium-webdriver 3.8.0的Rails v。5.1.6.2上使用ruby。

堆栈跟踪:

Selenium::WebDriver::Error::UnknownCommandError:
            unknown command: Cannot call non W3C standard command while in W3C mode
          # 0   chromedriver                        0x000000010c46e8e9 chromedriver + 3594473
          # 1   chromedriver                        0x000000010c3fe543 chromedriver + 3134787
          # 2   chromedriver                        0x000000010c1aa29f chromedriver + 692895
          # 3   chromedriver                        0x000000010c11a691 chromedriver + 104081
          # 4   chromedriver                        0x000000010c11b7d5 chromedriver + 108501
          # 5   chromedriver                        0x000000010c42d555 chromedriver + 3327317
          # 6   chromedriver                        0x000000010c438e60 chromedriver + 3374688
          # 7   chromedriver                        0x000000010c438bf8 chromedriver + 3374072
          # 8   chromedriver                        0x000000010c40cd39 chromedriver + 3194169 …
Run Code Online (Sandbox Code Playgroud)

selenium google-chrome selenium-chromedriver selenium-webdriver webdriver-w3c-spec

17
推荐指数
3
解决办法
9192
查看次数

在黄瓜Ruby中使用Selenium ChromeDriver在W3C模式下(Selenium :: WebDriver :: Error :: UnknownCommandError)无法调用非W3C标准命令

我们拥有Cucumber Ruby自动化框架,我们在Jenkins的Docker上的Chrome无头浏览器上运行了一些测试。几天前,我们这次使用ChromeDriver 2.46和google-chrome-unstable浏览器,并使用以下命令,开始收到错误消息:“此版本的ChromeDriver仅支持Chrome版本75”:

#Chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
RUN apt-get update -y
RUN apt-get install -y google-chrome-unstable
RUN apt-get install unzip

# Set up Chromedriver Environment variables
ENV CHROMEDRIVER_VERSION 2.46
ENV CHROMEDRIVER_VERSION 75.0.3770.8
ENV CHROMEDRIVER_DIR /chromedriver
RUN mkdir $CHROMEDRIVER_DIR
# Download and install Chromedriver
RUN wget -q --continue -P $CHROMEDRIVER_DIR "http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip"
RUN unzip $CHROMEDRIVER_DIR/chromedriver* -d $CHROMEDRIVER_DIR
ENV PATH $CHROMEDRIVER_DIR:$PATH
Run Code Online (Sandbox Code Playgroud)

我现在将chromedriver版本更新为,75.0.3770.8并将浏览器更新为google-chrome-beta=75.0.3770.27-1

#Chrome
RUN wget …
Run Code Online (Sandbox Code Playgroud)

ruby selenium google-chrome selenium-chromedriver webdriver-w3c-spec

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

Selenium webdriver:修改navigator.webdriver标志以防止硒检测

我正在尝试使用selenium和chrome在网站中自动执行一项非常基本的任务,但不知何故,网站检测到chrome由硒驱动并阻止每个请求.我怀疑该网站依赖于一个暴露的DOM变量,如/sf/answers/2933311741/来检测selenium驱动的浏览器.

我的问题是,有没有办法让navigator.webdriver标志为假?我愿意在修改之后尝试重新编译硒源,但我似乎无法在存储库中的任何地方找到NavigatorAutomationInformation源https://github.com/SeleniumHQ/selenium

任何帮助深表感谢

PS:我还从https://w3c.github.io/webdriver/#interface尝试了以下内容

Object.defineProperty(navigator, 'webdriver', {
    get: () => false,
  });
Run Code Online (Sandbox Code Playgroud)

但它只在初始页面加载后更新属性.我认为该网站在我的脚本执行之前检测到该变量.

java selenium webdriver selenium-webdriver webdriver-w3c-spec

10
推荐指数
9
解决办法
5531
查看次数

使用 Selenium 时 JsonWireProtocol 机制与 W3C Living Document 中的新标准之间的差异

我想知道使用 Selenium 进行 UI 测试时, JsonWireProtocol(状态:OBSOLETE)和 2019 年 12 月 31 日的 W3C Living Document(新标准)中的机制有什么区别。我知道 Selenium 使用了以下内容:当我们创建驱动程序的新实例时(C#):

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
IWebDriver driver = new ChromeDriver();
Run Code Online (Sandbox Code Playgroud)

我们实际上向 selenium 服务器发出POST /session请求。之后通过 JsonWireProtocol,例如:

POST /session/:sessionId/element/:id/click,我们可以找到并单击特定元素,或者对其他请求执行一些其他操作...

那么现在有哪些新事物呢?谁能解释一下新标准?如果有人能深入地做到这一点,我会非常高兴!

WebDriver W3C 动态文档 2019 年 12 月 31 日

JsonWire协议

selenium w3c webdriver selenium-webdriver webdriver-w3c-spec

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

2022 年使用 Selenium 捕获网络流量

2022 年在 selenium 中捕获网络日志的最佳方式是什么?我知道有多个用作browsermob代理服务器的示例。但从 GitHub 上看,browsermob 存储库似乎不再维护了。

selenium automation browsermob webdriver-w3c-spec

5
推荐指数
0
解决办法
496
查看次数

Protocol和Json Wire Protocol有什么区别

协议:一种标准,用于定义通过网络交换数据的方法。如果浏览器要与服务器通信,则必须创建一个HTTP请求并将该HTTP请求发送到服务器以传达其资源和选项请求。服务器接收请求并对其进行处理,并进行必要的操作,并创建HTTP响应以发送到浏览器。浏览器在创建HTTP请求时必须遵循HTTP规范。服务器还必须遵循HTTP规范来创建HTTP响应。这是浏览器和服务器之间以标准方式进行通信的方式,通过遵循HTTP协议来避免冲突。

Json Wire Protocol:客户端具有必须发送到服务器的对象。客户端将此对象转换为JSON对象,并将其发送到服务器。服务器解析JSON对象,并将其转换回对象以供使用。服务器将响应对象转换为JSON对象,然后将其发送回客户端。然后,客户端将JSON对象转换为要使用的对象。

为什么将后者称为Json Wire Protocol

json protocols http selenium-webdriver webdriver-w3c-spec

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

Selenium 和非无头浏览器不断要求验证码

我遇到了一个问题,我们的一个网站一直在云中的浏览器中以无头模式要求验证码,所以我将其切换为非无头模式,这样我就可以自己输入验证码,我想下次它会工作,也许是因为一些 cookie 已经被存储了,但即使我输入了几次验证码,它也没有存储。

另外值得一提的是,它在任何模式下都可以在本地运行良好,并且对于非自动化版本,它在云中也运行良好,但是一旦我在任何模式下使用 Selenium 运行它,它就会不断要求验证码。非常感谢任何可能发生的事情和解决方案的想法

selenium captcha webdriver selenium-webdriver webdriver-w3c-spec

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

selenium 中的 ChromeDriver 和 WebDriver 有什么区别?

如果我们创建:

ChromeDriver driver=new ChromeDriver();
Run Code Online (Sandbox Code Playgroud)

chrome 驱动程序方法将被执行。

如果我们创建:

WebDriver driver=new ChromeDriver();
Run Code Online (Sandbox Code Playgroud)

再次ChromeDriver执行方法[根据方法覆盖]。

那为什么我们只在执行时写后一个呢?

java selenium webdriver selenium-webdriver webdriver-w3c-spec

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