GVKun编程网logo

在Selenium WebDriver中按Ctrl + A(selenium 按钮点击)

19

本文将为您提供关于在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 按钮点击)

在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

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中获取单个文本节点

html – 如何在Selenium WebDriver中获取单个文本节点

参见英文答案 > Getting text from a node2个
我想从标签中获取文本但没有嵌套标签的文本.即在下面的示例中,我只想从< 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中不起作用?

java – 为什么拖放在Selenium Webdriver中不起作用?

我试图使用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);

以上代码都没有为我工作.所有上述运行没有任何错误,但拖放并没有发生在应用程序中.任何人有任何其他解决方案?谢谢.

解决方法

在你的代码1:
不调用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检测

如何解决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 + Aselenium 按钮点击的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Electron 使用 Selenium 和 WebDriver、html – 如何在Selenium WebDriver中获取单个文本节点、java – 为什么拖放在Selenium Webdriver中不起作用?、JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测等相关知识的信息别忘了在本站进行查找喔。

本文标签: