本文将为您提供关于在SeleniumWebDriver中按Ctrl+A的详细介绍,我们还将为您解释selenium按钮点击的相关知识,同时,我们还将为您提供关于Electron使用Selenium和W
本文将为您提供关于在Selenium WebDriver中按Ctrl + A的详细介绍,我们还将为您解释selenium 按钮点击的相关知识,同时,我们还将为您提供关于Electron 使用 Selenium 和 WebDriver、html – 如何在Selenium WebDriver中获取单个文本节点、java – 为什么拖放在Selenium Webdriver中不起作用?、JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测的实用信息。
本文目录一览:- 在Selenium WebDriver中按Ctrl + A(selenium 按钮点击)
- Electron 使用 Selenium 和 WebDriver
- html – 如何在Selenium WebDriver中获取单个文本节点
- java – 为什么拖放在Selenium Webdriver中不起作用?
- JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测
在Selenium WebDriver中按Ctrl + A(selenium 按钮点击)
我需要使用Selenium WebDriver 按Ctrl
+ A
键。有什么办法吗?
我检查了Selenium库,发现Selenium只允许按特殊键和功能键。
答案1
小编典典另一种解决方案(在Java中,因为您没有告诉我们您的语言-但它在具有Keys
类的所有语言中均以相同的方式工作):
String selectAll = Keys.chord(Keys.CONTROL, "a");driver.findElement(By.whatever("anything")).sendKeys(selectAll);
您可以使用它在<input>
或整个页面上选择整个文本(只需找到html
元素并将其发送给它)。
编辑 -OP声明他正在使用Selenium Ruby绑定后
Ruby绑定chord()
中的Keys
类中没有任何方法。因此,根据Hari
Reddy的建议,您必须使用Selenium
Advanced用户交互API,请参阅ActionBuilder
:
driver.action.key_down(:control) .send_keys("a") .key_up(:control) .perform
Electron 使用 Selenium 和 WebDriver
引自ChromeDriver - WebDriver for Chrome:
WebDriver 是一款开源的支持多浏览器的自动化测试工具。它提供了操作网页、用户输入、JavaScript 执行等能力。ChromeDriver 是一个实现了 WebDriver 与 Chromium 联接协议的独立服务。它也是由开发了 Chromium 和 WebDriver 的团队开发的。
为了能够使 chromedriver 和 Electron 一起正常工作,我们需要告诉它 Electron 在哪,并且让它相信 Electron 就是 Chrome 浏览器。
通过 WebDriverJs 配置
WebDriverJs 是一个可以配合 WebDriver 做测试的 node 模块,我们会用它来做个演示。
1. 启动 ChromeDriver
首先,你要下载 chromedriver,然后运行以下命令:
$ ./chromedriver Starting ChromeDriver (v2.10.291558) on port 9515Only local connections are allowed.
记住 9515 这个端口号,我们后面会用到
2. 安装 WebDriverJS
$ npm install selenium-webdriver
3. 联接到 ChromeDriver
在 Electron 下使用 selenium-webdriver 和其平时的用法并没有大的差异,只是你需要手动设置连接 ChromeDriver,以及 Electron 的路径:
const webdriver = require('selenium-webdriver');var driver = new webdriver.Builder() // 9515 是ChromeDriver使用的端口 .usingServer('http://localhost:9515') .withCapabilities({ chromeOptions: { // 这里设置Electron的路径 binary: '/Path-to-Your-App.app/Contents/MacOS/Atom', } }) .forbrowser('electron') .build(); driver.get('http://www.google.com'); driver.findElement(webdriver.By.name('q')).sendKeys('webdriver'); driver.findElement(webdriver.By.name('btnG')).click(); driver.wait(function() { return driver.getTitle().then(function(title) { return title === 'webdriver - Google Search'; }); }, 1000); driver.quit();
通过 WebdriverIO 配置
WebdriverIO 也是一个配合 WebDriver 用来测试的 node 模块
1. 启动 ChromeDriver
首先,下载 chromedriver,然后运行以下命令:
$ chromedriver --url-base=wd/hub --port=9515Starting ChromeDriver (v2.10.291558) on port 9515Only local connections are allowed.
记住 9515 端口,后面会用到
2. 安装 WebdriverIO
$ npm install webdriverio
3. 连接到 ChromeDriver
const webdriverio = require('webdriverio');var options = { host: localhost, // 使用localhost作为ChromeDriver服务器 port: 9515, // 9515是ChromeDriver使用的端口 desiredCapabilities: { browserName: 'chrome', chromeOptions: { binary: '/Path-to-Your-App/electron', // Electron的路径 args: [/* cli arguments */] // 可选参数,类似:'app=' + /path/to/your/app/ } } };var client = webdriverio.remote(options); client .init() .url('http://google.com') .setValue('#q', 'webdriverio') .click('#btnG') .getTitle().then(function(title) { console.log('Title was: ' + title); }) .end();
工作流程
无需重新编译 Electron,只要把 app 的源码放到 Electron的资源目录 里就可直接开始测试了。
当然,你也可以在运行 Electron 时传入参数指定你 app 的所在文件夹。这步可以免去你拷贝-粘贴你的 app 到 Electron 的资源目录。
html – 如何在Selenium WebDriver中获取单个文本节点
我想从标签中获取文本但没有嵌套标签的文本.即在下面的示例中,我只想从< small>中获取字符串183591.从< span>标记并排除文本服务请求ID:标签.这不是微不足道的,因为< span> tag嵌套在< small>中标签.这可能与WebDriver和XPath一起使用吗?
标签中的文字每次都会改变.
<div id="claimInfoBox"> <div> <div> <h4https://www.jb51.cc/tag/ott/" target="_blank">ottom"> <p> <small> <span>Service Request ID:</span> 183591 </small> </p> <divhttps://www.jb51.cc/tag/ott/" target="_blank">ottom"></div> <div id="CIB_PersonalInfo_displayMode"> <div id="CIB_PersonalInfo_EditMode"https://www.jb51.cc/tag/dis/" target="_blank">display: none"> </div> </div> <script type="text/javascript"> </div> </div>
解决方法
// you will need to adjust these XPaths to suit your needs String outside = driver.findElement(By.xpath("//small")).getText(); String inside = driver.findElement(By.xpath("//span")).getText(); String edge = outside.replace(inside,"");
java – 为什么拖放在Selenium Webdriver中不起作用?
WebElement sourceelement = driver.findElement(By.cssSelector("XXX")); WebElement destelement = driver.findElement(By.cssSelector("YYY"));
代码1: –
Actions builder = new Actions( _controls.getDriver()); builder.dragAndDrop(sourceelement,destelement);
代码2: –
Actions builder = new Actions(_controls.getDriver()); Action dragAndDrop = builder.clickAndHold(sourceelement).movetoElement(destelement).release(destelement).build(); Thread.sleep(2000); dragAndDrop.perform()
CODE3: –
Point coordinates1 = sourceelement.getLocation(); Point coordinates2 = destelement.getLocation(); Robot robot = new Robot(); robot.mouseMove(coordinates1.getX(),coordinates1.getY()); robot.mousepress(InputEvent.BUTTON1_MASK); robot.mouseMove(coordinates2.getX(),coordinates2.getY()); robot.mouseRelease(InputEvent.BUTTON1_MASK); Thread.sleep(2000);
码4: –
final String java_script = "var src=arguments[0],tgt=arguments[1];var dataTransfer={dropEffe" + "ct:'',effectAllowed:'all',files:[],items:{},types:[],setData:fun" + "ction(format,data){this.items[format]=data;this.types.append(for" + "mat);},getData:function(format){return this.items[format];},clea" + "rData:function(format){}};var emit=function(event,target){var ev" + "t=document.createEvent('Event');evt.initEvent(event,true,false);" + "evt.dataTransfer=dataTransfer;target.dispatchEvent(evt);};emit('" + "dragstart',src);emit('dragenter',tgt);emit('dragover',tgt);emit(" + "'drop',tgt);emit('dragend',src);"; ((JavascriptExecutor)_controls.getDriver()).executeScript(java_script,sourceelement,destelement); Thread.sleep(2000);
以上代码都没有为我工作.所有上述运行没有任何错误,但拖放并没有发生在应用程序中.任何人有任何其他解决方案?谢谢.
解决方法
不调用perform()方法,
它应该是
Actions builder = new Actions( _controls.getDriver());
builder.dragAndDrop(sourceelement,destelement).perform();
在你的代码2:我不认为你需要调用release()
请在发布之前搜索similar questions.
JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测
如何解决JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测?
从当前的实现开始,一种理想的访问网页而不被检测到的方法是使用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 webdriver
options = 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/")
解决方法
我正在尝试使用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,});
但是它仅在初始页面加载后更新属性。我认为网站会在执行脚本之前检测到变量。
关于在Selenium WebDriver中按Ctrl + A和selenium 按钮点击的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Electron 使用 Selenium 和 WebDriver、html – 如何在Selenium WebDriver中获取单个文本节点、java – 为什么拖放在Selenium Webdriver中不起作用?、JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测等相关知识的信息别忘了在本站进行查找喔。
本文标签: