我正在使用PowerShell编写一些Internet Explorer自动化脚本.以下是我启动IE com对象的方法:
$ie = New-Object -com "InternetExplorer.Application"
$ie.Navigate("about:blank")
$ie.visible = $true
$doc = $ie.Document
Run Code Online (Sandbox Code Playgroud)
所以,我想要做的是在$ doc对象上执行一些javascript.例如,我在页面上有一个项目有一个执行"submitCommand('lookup')"的onclick事件,所以我想直接在$ doc上运行它而不必在页面上找到对象然后调用它上面的Click()方法.
由于对象没有名称或id,因此更容易变化,因为我只能依赖它在页面上的位置(例如:页面上的第11个跨度项目).
或者,您如何根据他们的班级选择元素?这会有很大的帮助,因为"按钮"有它自己的类.
谢谢
我正在创建一系列Web自动化测试,这些测试要求测试数据位于数据库中(SQL Server 2008).要为每个测试生成所需的数据,我必须调用一些C#代码,这些代码将正确的数据插入到DB中(即我不能只编写SQL脚本来插入数据).我的问题是我不想用这些自动化测试中的大量测试数据来污染我的测试数据库.因此,想要回滚测试期间对数据库所做的所有更改.
任何人都可以提出一个明智的方法来实现这一目标
使用Watir,有没有办法访问没有属性的元素?
例如:
<span>Text</span>
Run Code Online (Sandbox Code Playgroud)
我想避免使用xpath,但如果这是唯一的方式很酷.
automation automated-tests watir webautomation watir-webdriver
我是WATIR测试的新手(我喜欢它!)并且已经碰到了如何将我的WATIR脚本重新聚焦到新打开的窗口的问题.这是我的(简化)脚本....
#!/usr/bin/ruby
require 'rubygems'
require 'watir-webdriver'
browser=Watir::Browser.new
browser.goto("http://0:3050")
browser.text_field(:name,"userkey300203830").set("OKJHNB")
browser.button(:id, "interview48").click
puts "Expected Result:"
puts "A successful display of cars"
if browser.window(:title=>"300203830").exists?
puts " Test passed. New window opened!"
else
puts " Test Failed! No window found"
end
Run Code Online (Sandbox Code Playgroud)
这一切都可以直到最后.单击"interview48"键后,将打开一个标题为"300203830"的新窗口.看起来我找到了但我现在还不知道如何关注那个窗口.
我一直在使用 Capybara 和 selenium 网络驱动程序来了解网络自动化。我一直在尝试使用 Capybara 刷新特定页面。我见过一些方法,但它们每个都有问题,使它们在某些情况下不可行。
session.visit 链接什么也不做,因为会话已经在那个链接上了。我可以做 session.reset!但后来我失去了登录。
我见过的其他几种方法 - 不要使用 Capybara 的内置等待功能。这意味着如果服务器负载很重 - 或者在我的 DL/UL 速率受限的测试中,“刷新”会发生,但它会迅速尝试在下一页中查找尚不存在的字段,因为它尚未存在加载。
所以我的问题是具体的 - 如何使用 Capybara 的内置等待功能在不丢失登录会话的情况下刷新 Capybara 中的页面?
我以下列方式使用exposeFunction-command:
await this.page.exposeFunction('foo', function(){ return 'bar'; });
Run Code Online (Sandbox Code Playgroud)
这按预期工作,并为我提供了 window.foo 函数。
如果我再次调用此代码,则会出现以下错误:
Error: Failed to add page binding with name foo: window['foo'] already exists!
Run Code Online (Sandbox Code Playgroud)
使用 page.goto() 导航时,此错误甚至仍然存在。
有没有办法解除exposeFunction()公开的函数的绑定?
我正在尝试使用 puppeteer 创建 PDF。创建PDF时设置视口根本没有效果。但是,视口设置确实适用于屏幕截图。过去似乎在 github 上发现了一些问题,但它们显然已被关闭。传入 defaultViewport: null 应该是解决方案。
这是我的代码:
browser = await chromium.puppeteer.launch({
args: chromium.args,
defaultViewport: null,
executablePath: await chromium.executablePath,
ignoreHTTPSErrors: true,
headless: true,
});
let page = await browser.newPage();
// Set viewport
await page.setViewport({width: 1440, height: 900, deviceScaleFactor: 2});
// Generate pdf
const doc = await page.pdf(options);
Run Code Online (Sandbox Code Playgroud)
我还尝试在启动时传递视口设置。
谢谢!
javascript webautomation node.js google-chrome-headless puppeteer
我想使用 Playwright for Python 一次打开多个 url。但我正在努力弄清楚如何做。这是来自异步文档:
async def main():
async with async_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = await browser_type.launch()
page = await browser.newPage()
await page.goto("https://scrapingant.com/")
await page.screenshot(path=f"scrapingant-{browser_type.name}.png")
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)
这将按顺序打开每个 browser_type。如果我想并行进行,我该怎么做?如果我想对网址列表做类似的事情,我该怎么做?
我尝试这样做:
urls = [
"https://scrapethissite.com/pages/ajax-javascript/#2015",
"https://scrapethissite.com/pages/ajax-javascript/#2014",
]
async def main(url):
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.newPage()
await page.goto(url)
await browser.close()
async def go_to_url():
tasks = [main(url) for url in urls]
await asyncio.wait(tasks)
go_to_url()
Run Code Online (Sandbox Code Playgroud)
但这给了我以下错误:
92: RuntimeWarning: …
Run Code Online (Sandbox Code Playgroud) python webautomation web-scraping playwright playwright-python
我正在使用 playwright 进行自动化测试。每次测试运行都会创建一个新的 chromium 实例。当我通过时,--auto-open-devtools-for-tabs
它会按预期打开开发工具。但是,我需要更进一步并启用保留日志复选框。测试速度很快,我需要在重定向之前查看请求。
python google-chrome webautomation playwright playwright-python
我们需要从C++应用程序(登录到应用程序,执行某些操作,注销)中执行一些相当复杂的Web自动化,但性能非常重要,因此我们正在考虑选项.
有没有办法直接从C++ 驱动WebKit或其他无头引擎,而不需要更多的层(如selenium + webdriver + network communication + ...)?也许是Chromedriver?
如果无法使用选项1,那么从C++运行WebDriver(使用真实浏览器)的最佳方式是什么?
webautomation ×10
javascript ×2
node.js ×2
playwright ×2
puppeteer ×2
python ×2
ruby ×2
watir ×2
automation ×1
c# ×1
c++ ×1
capybara ×1
com ×1
powershell ×1
selenium ×1
sql-server ×1
test-data ×1
web-scraping ×1
webdriver ×1