以上就是给各位分享Selenium2.0WebDriver进阶交互DoubleClick帮助,其中也会对c#进行解释,同时本文还将给你拓展Electron使用Selenium和WebDriver、Ja
以上就是给各位分享Selenium 2.0 WebDriver进阶交互DoubleClick帮助,其中也会对c#进行解释,同时本文还将给你拓展Electron 使用 Selenium 和 WebDriver、JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测、org.openqa.selenium.WebDriverBackedSelenium的实例源码、Python Selenium Webdriver click()无法正常工作等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- Selenium 2.0 WebDriver进阶交互DoubleClick帮助(c#)(selenium onclick)
- Electron 使用 Selenium 和 WebDriver
- JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测
- org.openqa.selenium.WebDriverBackedSelenium的实例源码
- Python Selenium Webdriver click()无法正常工作
Selenium 2.0 WebDriver进阶交互DoubleClick帮助(c#)(selenium onclick)
因此,在selenium回归测试中,我一直试图双击日历以创建新的应用。我试图使用doubleClick();
AdvancedUserInteractions库中的方法,但是存在问题;这两次单击的速度不够快/不够紧密,无法触发实际的双击!是否有人在测试中找到解决此问题的方法?
答案1
小编典典该代码对我有用!
Actions action = new Actions(driver);action.doubleClick(myElemment);action.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 的资源目录。
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/")
org.openqa.selenium.WebDriverBackedSelenium的实例源码
@Before public void setUp() throws Exception { MockLogAppender.setupLogging(true,"DEBUG"); // Google Chrome // System.setProperty("webdriver.chrome.driver","/Users/ranger/Downloads/chromedriver"); // WebDriver driver = new ChromeDriver(); // Selenium Remote Server // DesiredCapabilities capability = DesiredCapabilities.firefox(); // WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),capability); // Firefox WebDriver driver = new FirefoxDriver(); String baseUrl = "http://localhost:8980/"; selenium = new WebDriverBackedSelenium(driver,baseUrl); selenium.open("/opennms/login.jsp"); selenium.type("name=j_username","admin"); selenium.type("name=j_password","admin"); selenium.click("name=Login"); waitForPagetoLoad(); }
protected WebDriverBackedSeleniumDriver(WebDriver wd,String url) { super(); setSiteUrl(url); Selenium wdbs = new WebDriverBackedSelenium(wd,url); setSelenium(wdbs); startSelenium(); }
@BeforeClass public static void setup() throws Exception { LOG.debug("Starting Jetty"); server = new Server(0); String url = setupJetty(); LOG.info("Jetty started on {}",url); driver = new FirefoxDriver(); LOG.debug("Starting selenium"); selenium = new WebDriverBackedSelenium(driver,url); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); }
/** * @param driver * @param locator */ public void hoverMouSEOn(WebDriver driver,String locator) { WebDriverBackedSelenium selenium = new WebDriverBackedSelenium(driver,driver.getcurrenturl()); selenium.mouSEOver(locator); }
public OwnerPage(WebDriverBackedSelenium selenium) { super("Owners",selenium,HomePage.PAGE_TITLE); if (!selenium.getHtmlSource().contains("Owner information")) { String msg = format("Owner information page has not been loaded from [%s]",selenium.getLocation()); throw new NotCorrectPageException(msg); } }
public AddOwnerPage(WebDriverBackedSelenium selenium) { super("Add Owner",HomePage.PAGE_TITLE); if (!selenium.getHtmlSource().contains(" New Owner")) { String msg = format("Add Owner page has not been loaded from [%s]",selenium.getLocation()); throw new NotCorrectPageException(msg); } }
public FindOwnersPage(WebDriverBackedSelenium selenium) { super("Find Owners",HomePage.PAGE_TITLE); if (!selenium.getHtmlSource().contains("Find Owners")) { String msg = format("Find Owners page has not been loaded from [%s]",selenium.getLocation()); throw new NotCorrectPageException(msg); } }
public HomePage(WebDriverBackedSelenium selenium) { super("Home",PAGE_TITLE); if (!selenium.getHtmlSource().contains("Welcome")) { String msg = format("Home page has not been loaded from [%s]",selenium.getLocation()); throw new NotCorrectPageException(msg); } }
public BasePage(String internalPageName,WebDriverBackedSelenium selenium,String expectedPageText) { this.internalPageName = internalPageName; this.selenium = selenium; String html = getHtml(); if (!html.contains(expectedPageText)) { String msg = format("Page body (%s) does not contain expected text (%s),current page is: %s",html,expectedPageText,selenium.getLocation()); throw new NotCorrectPageException(msg); } }
public browserEmulator() { setupbrowserCoreType(GlobalSettings.browserCoreType); browser = new WebDriverBackedSelenium(browserCore,"https://github.com/"); javaScriptExecutor = (JavascriptExecutor) browserCore; logger.info("Started browserEmulator"); }
/** * 获取 WebDriverBackedSelenium 实例 * @return */ public WebDriverBackedSelenium getbrowser() { return browser; }
Python Selenium Webdriver click()无法正常工作
认证过程需要一些时间。您可以在单击按钮后再使另一个“睡眠”状态,然后开始工作。
def login(self):
self.driver.implicitly_wait(10)
self.driver.get('{}/'.format(self.base_url))
self.driver.find_element_by_name('username').send_keys(self.username)
self.driver.find_element_by_name('password').send_keys(self.password)
self.driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[3]').click()
time.sleep(5) # <--- adjust to your needs
今天关于Selenium 2.0 WebDriver进阶交互DoubleClick帮助和c#的讲解已经结束,谢谢您的阅读,如果想了解更多关于Electron 使用 Selenium 和 WebDriver、JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测、org.openqa.selenium.WebDriverBackedSelenium的实例源码、Python Selenium Webdriver click()无法正常工作的相关知识,请在本站搜索。
本文标签: