希望专家能帮助我解开 Selenium/Cloudflare 之谜。我可以让一个网站在普通(非无头)Selenium 中加载,但无论我尝试什么,我都无法让它在无头中加载。
我已遵循 StackOverflow 帖子中的建议,例如Is there a version of Selenium WebDriver that is not detectorable? 。window我还查看了和对象的所有属性window.navigator,并修复了无头和非无头之间的所有差异,但不知何故仍然检测到无头。此时我非常好奇 Cloudflare 如何能够找出其中的差异。谢谢你的时间!
我尝试过的事情列表:
cdc_为 chromedriver 中的另一个字符串options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option('useAutomationExtension', False)options.add_argument('--disable-blink-features=AutomationControlled')(这是让网站以非无头方式加载所必需的)navigator.webdriver = undefinednavigator.plugins、navigator.languages、 和navigator.mimeTypeswindow.ScreenY, window.screenTop, window.outerWidth,设置window.outerHeight为非零window.chrome和window.navigator.chromeModernizr重复实验
为了让网站在正常(非无头)Selenium 中加载,您必须点击_blank另一个网站的链接(以便目标网站在另一个选项卡中打开)。要复制该实验,首先创建一个包含内容的 html 文件<a href="https://poocoin.app" target="_blank">link</a>,然后在以下代码中粘贴该 html 文件的路径。
下面的版本(非无头)运行良好并加载网站,但如果您设置 …
我在硒化物中编写了自动化测试代码,但奇怪的时间出现了。
浏览器窗口无法与 http://localhost:2757/devtools/browser/uuid 建立 websocket 连接
> [ERROR] Tests run: 97, Failures: 1, Errors: 0, Skipped: 96, Time
> elapsed: 3.945 s <<< FAILURE! - in
> com.rev.testManager.GenericTestManager [ERROR]
> com.rev.testManager.GenericTestManager.openPage Time elapsed: 3.727 s
> <<< FAILURE!
> org.openqa.selenium.remote.http.ConnectionFailedException: Unable to
> establish websocket connection to
> http://localhost:2757/devtools/browser/d5f72b05-f030-41ee-88b2-5823e7d0f35c
> Build info: version: '4.4.0', revision: 'e5c75ed026a' System info:
> host: 'localhost', ip: '127.0.0.1', os.name: 'Linux', os.arch:
> 'amd64', os.version: '5.14.0-283.el9.x86_64', java.version: '18.0.2'
> Driver info: driver.version: SelenideDriver selenide.url:
> https://www.buletintv3.my/ …Run Code Online (Sandbox Code Playgroud) 如果我有一个HTML元素<input type="submit" value="Search" />,则css选择器需要区分大小写:
input[value='Search'] 火柴
input[value='search'] 不匹配
我需要一个解决方案,其中不区分大小写的方法也适用.我正在使用Selenium 2和Jquery,所以欢迎两者的答案.
jquery case-insensitive css-selectors jquery-selectors selenium-webdriver
第一次海报.我已经在UI自动化领域工作了很多年,但最近才引入/指示使用Page Object Model.其中大部分是常识,包括我已经使用的技术,但有一个特别好的点我无法在自己的脑海中证明,尽管广泛搜索了一个合理的解释.我希望这里有人可以启发我,因为这个问题引起了一些惊愕,因为我试图将POM与我自己的最佳实践相结合.
来自http://code.google.com/p/selenium/wiki/PageObjects:
上面给出的代码显示了一个重要的观点:测试而不是PageObjects应该负责对页面状态进行断言....当然,正如每个指南都有例外......
来自http://seleniumhq.org/docs/06_test_design_considerations.html#chapter06-reference:
在如何设计页面对象方面有很多灵活性,但是有一些基本规则可以获得测试代码所需的可维护性.页面对象本身永远不应该进行验证或断言.这是测试的一部分,应该始终在测试代码中,而不是在页面对象中.页面对象将包含页面的表示形式,以及页面通过方法提供的服务,但是没有与正在测试的内容相关的代码应该在页面对象中.
有一个单一的验证可以而且应该在页面对象中,即验证页面以及页面上可能的关键元素是否已正确加载.应在实例化页面对象时完成此验证.
这两个"指南"都允许潜在的例外,但我对基本前提不能不同意.我习惯于在"页面方法"中进行大量的验证,我认为验证的存在是一种强大的技术,可以在各种环境中查找问题(即每次调用方法时都会进行验证)而不仅仅发生在特定测试的有限环境中.
例如,让我们想象一下,当您登录AUT时,会出现一些文本"以USER身份登录".有一个测试专门验证这个是合适的,但为什么不想在每次调用登录时验证它?这个工件与页面"是否正确加载"没有直接关系,并且它与"正在测试的内容"无关,因此根据上面的POM指南,它显然不应该是页面方法. ..但在我看来,它显然应该存在,通过尽可能经常地验证重要的工件来最大化自动化的力量,尽可能少的事先考虑.将验证码放入页面方法可以增加自动化的功能,允许您"免费"获得大量验证,而不必在测试中担心,并且在不同的环境中进行频繁验证通常会发现您不会发现的问题如果验证仅限于对该工件的单个测试.
换句话说,我倾向于区分特定于测试的验证和"一般"验证,并且我认为后者被广泛地包含在页面方法中是完全合适/可取的.这促进了更薄的测试和更厚的页面对象,这通常通过重用更多代码来提高测试可维护性 - 尽管这些指南中存在相反的争用.我错过了这一点吗?不希望在页面方法中进行验证的真正原理是什么?我所描述的情况实际上是这些指南中描述的"例外"之一,因此实际上与POM不一致吗?提前感谢您的想法.-jn-
如何使用Selenium Webdriver处理登录弹出窗口?我在这里附上了示例屏幕.如何在此登录弹出/警告窗口中输入/输入用户名和密码?
感谢和问候,

Selenium RC和之间的基本区别是WebDriver什么?
我有以下HTML:
<button name="btnG" class="gbqfb" aria-label="Google Search" id="gbqfb"><span class="gbqfi"></span></button>
Run Code Online (Sandbox Code Playgroud)
我在下面的单击"Google搜索"按钮的代码在WebDriver中使用Java工作得很好.
driver.findElement(By.id("gbqfb")).click();
Run Code Online (Sandbox Code Playgroud)
我想在WebDriver中使用JavaScript来单击按钮.我该怎么做?
我在Selenium 2 Web驱动程序测试中有以下代码,它在我调试时有效,但是当我在构建中运行它时大部分时间都失败了.我知道它必须与页面没有刷新的方式有关,但不知道如何解决它所以任何关于我做错了什么的指针都很感激.我使用JSF primefaces作为我的Web应用程序框架.当我点击添加新链接时,会出现一个弹出对话框,其中包含一个我可以输入日期的输入框,然后单击保存.它是在输入元素输入文本,我得到一个陈旧的元素引用异常.
提前致谢
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class EnterActiveSubmissionIntegrationTest {
Map<String, Map<String, String>> tableData = new HashMap<String, Map<String, String>>();
@Test
public void testEnterActiveSubmission() throws Exception {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
System.setProperty("webdriver.chrome.driver", "C:/apps/chromedriver.exe");
WebDriver driver = …Run Code Online (Sandbox Code Playgroud) 我目前有很多情况需要验证页面(及其所有元素)是否正确显示.isDisplayed()WebElement 的方法似乎是一种逻辑方式,但我想准确理解这个方法正在做什么来确定元素是否"显示".所述的Javadoc在网络上似乎是稀疏充其量不棚上的方法和其它信息的内部运作任何光.
如果有人能提供这种方法如何运作的详细描述,我将非常感激.
我遇到了以下问题:当我运行自动化测试时,我在Chrome中不断收到以下警告"禁用开发人员模式扩展".

有没有办法删除/禁用此功能?这对我来说是一个阻碍因为它让我失败了一些测试.
提前致谢
selenium ×6
java ×4
webdriver ×4
alert ×1
bots ×1
button ×1
click ×1
javascript ×1
jquery ×1
pageobjects ×1
popup ×1
python ×1
ruby ×1
selenide ×1
selenium-rc ×1