在刚刚发布的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
我们拥有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
我正在尝试使用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
我想知道使用 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,我们可以找到并单击特定元素,或者对其他请求执行一些其他操作...
那么现在有哪些新事物呢?谁能解释一下新标准?如果有人能深入地做到这一点,我会非常高兴!
selenium w3c webdriver selenium-webdriver webdriver-w3c-spec
2022 年在 selenium 中捕获网络日志的最佳方式是什么?我知道有多个用作browsermob代理服务器的示例。但从 GitHub 上看,browsermob 存储库似乎不再维护了。
协议:一种标准,用于定义通过网络交换数据的方法。如果浏览器要与服务器通信,则必须创建一个HTTP请求并将该HTTP请求发送到服务器以传达其资源和选项请求。服务器接收请求并对其进行处理,并进行必要的操作,并创建HTTP响应以发送到浏览器。浏览器在创建HTTP请求时必须遵循HTTP规范。服务器还必须遵循HTTP规范来创建HTTP响应。这是浏览器和服务器之间以标准方式进行通信的方式,通过遵循HTTP协议来避免冲突。
Json Wire Protocol:客户端具有必须发送到服务器的对象。客户端将此对象转换为JSON对象,并将其发送到服务器。服务器解析JSON对象,并将其转换回对象以供使用。服务器将响应对象转换为JSON对象,然后将其发送回客户端。然后,客户端将JSON对象转换为要使用的对象。
为什么将后者称为Json Wire Protocol?
我遇到了一个问题,我们的一个网站一直在云中的浏览器中以无头模式要求验证码,所以我将其切换为非无头模式,这样我就可以自己输入验证码,我想下次它会工作,也许是因为一些 cookie 已经被存储了,但即使我输入了几次验证码,它也没有存储。
另外值得一提的是,它在任何模式下都可以在本地运行良好,并且对于非自动化版本,它在云中也运行良好,但是一旦我在任何模式下使用 Selenium 运行它,它就会不断要求验证码。非常感谢任何可能发生的事情和解决方案的想法
selenium captcha webdriver selenium-webdriver webdriver-w3c-spec
如果我们创建:
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