本篇文章给大家谈谈如何使用带有Java的SeleniumWebDriver关闭特定窗口?,以及selenium关闭指定窗口的知识点,同时本文还将给你拓展JavaSeleniumWebdriver:修改
本篇文章给大家谈谈如何使用带有Java的Selenium WebDriver关闭特定窗口?,以及selenium关闭指定窗口的知识点,同时本文还将给你拓展JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测、node.js – 带有webdriverjs的javascript或带有selenium-webdriver的java?、Selenium WebDriver:等待带有JavaScript的复杂页面加载、使用Java的Selenium WebDriver滚动等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 如何使用带有Java的Selenium WebDriver关闭特定窗口?(selenium关闭指定窗口)
- JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测
- node.js – 带有webdriverjs的javascript或带有selenium-webdriver的java?
- Selenium WebDriver:等待带有JavaScript的复杂页面加载
- 使用Java的Selenium WebDriver滚动
如何使用带有Java的Selenium WebDriver关闭特定窗口?(selenium关闭指定窗口)
我使用Selenium WebDriver。我打开第一页,然后打开第二页-
执行一些操作,然后返回第一页。在我想关闭第二页之前,我使用了命令driver.close();
,但是它关闭了第一页而不是第二页。如何使Selenium关闭特定窗口?
部分代码
String HandleBefore = driver.getWindowHandle();
driver.findElement(By.xpath("...")).click();
for (String twohandle : driver.getWindowHandles()) {
driver.switchTo().window(twohandle);
}
driver.findElement(By.linkText("001")).click();
driver.close();
JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测
我正在尝试使用selenium和铬在网站中自动化一个非常基本的任务,但是以某种方式网站会检测到铬是由selenium驱动的,并阻止每个请求。我怀疑该网站是否依赖像这样的公开DOM变量https://stackoverflow.com/a/41904453/648236来检测selenium驱动的浏览器。
我的问题是,有没有办法使navigator.webdriver标志为假?我愿意尝试修改后重新尝试编译selenium源,但是似乎无法在存储库中的任何地方找到NavigatorAutomationInformation源https://github.com/SeleniumHQ/selenium
任何帮助深表感谢
PS:我还从https://w3c.github.io/webdriver/#interface尝试了以下操作
Object.defineProperty(navigator, ''webdriver'', { get: () => false, });
但是它仅在初始页面加载后更新属性。我认为网站会在执行脚本之前检测到变量。
答案1
小编典典从当前的实现开始,一种理想的访问网页而不被检测到的方法是使用ChromeOptions()该类向以下参数添加几个参数:
排除enable-automation
开关的集合
关掉 useAutomationExtension
通过以下实例ChromeOptions
:
Java示例:
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");ChromeOptions options = new ChromeOptions();options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));options.setExperimentalOption("useAutomationExtension", false);WebDriver driver = new ChromeDriver(options);driver.get("https://www.google.com/");
Python范例
from selenium import webdriveroptions = webdriver.ChromeOptions()options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option(''useAutomationExtension'', False)driver = webdriver.Chrome(options=options, executable_path=r''C:\path\to\chromedriver.exe'')driver.get("https://www.google.com/")
node.js – 带有webdriverjs的javascript或带有selenium-webdriver的java?
我们已经使用selenium-webdriver了解java,但是当我们开始使用新框架时,我们只想打开简单,快速和可靠的选项.
请建议javascript与webdriverjs(我们需要学习javascript)或java与selenium-webdriver?
解决方法
Java堆栈上有很多selenium工程师,但在Node.js和selenium-webdriver堆栈上并不多.
大多数较新的现代测试框架都是在Node.js中完成的,因为前端和后端都是使用NodeJS完成的,并将继续这种趋势.我要问的问题是开发团队是使用Java(例如Tomcat)还是使用Node.js来开发他们的产品.如果他们使用的是Node.js,那么将测试框架用同一种语言编写也是理想的.
这是为了方便
>开发和自动化团队,定位器等之间的协作.
>减轻开发人员编写硒测试的摩擦
marcel Erz在我们的South Bay Selenium聚会上对此进行了非常好的介绍.我强烈建议您在做出决定之前先仔细阅读.
Java与JavaScript(用于UI测试)
>前端工程师编写的大多数测试
>不熟悉Java及其生态系统
>上下文切换
>不太可能接受测试
http://www.marcelerz.com/blog/talk-nodejs-based-selenium-testing-south-bay-selenium-meetup
现在,如果您开始使用Javascript,那么主要的挑战当然是异步.大多数自动化工程师习惯于使用Python和Java同步模式.需要一些时间来习惯javascript的异步行为.但最终结果是值得的.
我们的框架主要用Node.js编写,我们使用Mocha作为我们的线束和测试运行器.推荐的断言库是Chai,但如果您需要特殊需求,可以使用其他库.
我们选择的selenium库是nd上的WebDriverJs(区分大小写)又名selenium-webdriver,它是官方的JavaScript端口.我们使用selenium-webdriver的主要原因之一是代码可读性以及实现类似同步语法的能力,以便让Java测试工程师牢记.这可以通过利用内置的Promise Manager控制流和Mocha Test Wrapper来实现,它可以自动处理对promise管理器的所有调用,使代码非常同步.
https://code.google.com/p/selenium/wiki/WebDriverJs#Writing_Tests
然后,这是一个添加自己的框架和构建页面对象的问题. Javascript中的页面对象是一个全新的野兽,您必须很好地掌握原型以及如何模拟Java的继承.
您还应该在npm中使用selenium-standalone作为本地和远程执行的唯一通信点,而不是在测试中创建驱动程序实例(本地/远程).这样,框架具有相同的接口并使事情保持一致.您不希望跟踪多个本地驱动程序可执行文件并更新它们.一个包装可以处理所有事情.
如果您已经阅读过这里,并且您非常确定您将使用Node.js路由而不是Java.下面是我们框架的一个非常简化的版本,可以帮助您入门.它具有上面描述的所有实现.欢迎任何拉动请求!
https://github.com/mekdev/mocha-selenium-pageobject
Selenium WebDriver:等待带有JavaScript的复杂页面加载
我有一个Web应用程序可以使用Selenium进行测试。页面加载时运行着许多JavaScript。
该JavaScript代码编写得不太好,但是我什么也不能更改。因此,使用findElement()
method 等待元素出现在DOM 中不是一个选择。
我想在Java中创建一个通用函数来等待页面加载,可能的解决方案是:
- 运行JavaScript脚本WebDriver并将结果存储
document.body.innerHTML
在字符串变量中body
。 - 将
body
变量与的早期版本进行比较body
。如果它们相同,则设置递增计数器,notChangedCount
否则设置notChangedCount
为零。 - 等待一小段时间(例如50毫秒)。
- 如果页面有一段时间没有变化(例如500毫秒),
notChangedCount >= 10
则退出循环,否则循环至第一步。
您认为这是有效的解决方案吗?
使用Java的Selenium WebDriver滚动
因此,当我点击浏览器当前可见区域下方的某些元素时,硒会尝试将元素滚动到视图中,然后单击它们.
但是由于自动滚动,因此元素在浮动标题后滚动,并且当对它们执行任何操作时,页眉中的元素被单击.
有没有办法限制WebDriver的默认滚动?
解决方法
Locatable hoverItem = (Locatable) driver.findElement(By.xpath("//li[text()='Reklama w Google']")); int y = hoverItem.getCoordinates().getLocationOnScreen().getY(); ((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+y+");");
我们今天的关于如何使用带有Java的Selenium WebDriver关闭特定窗口?和selenium关闭指定窗口的分享就到这里,谢谢您的阅读,如果想了解更多关于JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测、node.js – 带有webdriverjs的javascript或带有selenium-webdriver的java?、Selenium WebDriver:等待带有JavaScript的复杂页面加载、使用Java的Selenium WebDriver滚动的相关信息,可以在本站进行搜索。
本文标签: