我正在将我的脚本从Watir升级到Watir-Webdriver,我想知道如何利用无头浏览器测试和网格测试.我已经对它进行了一些研究但是我的来源似乎没有得到证实,现在教程非常薄,所以有人做过无头浏览或网格测试吗?你是如何实现它的,你学到了什么,你希望你知道什么时候开始?
我正在研究XP和MS Server '03 VM机器.如果我在此方面取得进展,我会尝试用信息更新问题.
出于测试目的,我在一台使用Utilu FF集合的机器上安装了多个Firefox .
如果有的话
b = Watir::Browser.new :ff
Run Code Online (Sandbox Code Playgroud)
在测试脚本中,它会自动执行最旧的FF版本,在我的情况下为3.6.22.我很惊讶,因为我认为默认情况下脚本将在Windows默认浏览器中执行,即Firefox6而不是Firefox 3.6.22.
如何指定必须使用哪个安装/版本的Firefox来执行Watir-webdriver测试脚本?
我们有一个独立的测试自动化团队,负责仅自动化watir + cucumber功能测试用例.他们的代码库没有附加到其他开发人员正在处理的rails应用程序,而是保持独立.到目前为止,我们已经自动化了几个测试用例,现在我们遇到了什么问题,一些(watir/cucumber specs)测试用例需要将一些数据预先存在到db中,所以它(testcase)应该只关注问题stmt,而不是创建任何数据 - 需要自己.
例如,如果必须检查评级是否适用于帖子,则需要预先存在一个帖子对象并且它只是检查评级.而不是创建第一个帖子对象,然后检查其评级.
这里最好的方法是什么?就像我们有用于导轨单元测试的固定装置和工厂女孩一样,黄瓜规格有什么用?或者我们只能在这里使用功能吗?这些测试人员可能不知道存在的所有模型,他们是否意识到它们,因此通过调用Rails-Model接口来使用fixture.
我的想法是,当我们编写功能文件时,它不应该指向或谈论任何看起来是元的东西的模型.Watir/specs测试用例应该只知道"Web应用程序"/浏览器只是作为交谈/处理应用程序的界面.他们不应该知道任何其他界面(夹具/模型).因此,他们应该通过利用他们所知道的单一界面自己创建自己的数据.
同样,我想知道的是,是否有任何ruby lib /代码,给定表名,列名和值(最像是fixtures yml)以及db参数.它只是将它们插入到db中,没有rails环境的上下文.因此测试人员将他们的环境与rails隔离开来,web开发人员可以自己工作.Rails装置,或工厂女孩似乎很好地配合铁轨.还是我错了?
我们可以在xpath值中使用正则表达式吗?我正在使用xpath值来识别Web上的元素以实现自动化.
我有以下:xpath值.
:xpath,'//*[@id="ngdialog4"]/div[2]/div[2]/table/tbody/tr/td[1]/input'
Run Code Online (Sandbox Code Playgroud)
但是,最后一个数字4 ngdialog4
不是常数,每次打开弹出窗口时它都会不断变化...我可以使用一些正则表达式来匹配任何数字吗?
在 watir 文档(http://watir.com/guides/chrome/)中,已经提到做
Watir::Browser.new :chrome, headless: true
Run Code Online (Sandbox Code Playgroud)
将使我们能够使用无头 chrome
这似乎不起作用。
我收到如下错误
2.4.0 :001 > require 'watir'
=> true
2.4.0 :002 > Watir::Browser.new :chrome, headless: true
ArgumentError: unknown option: {:headless=>true}
from /Users/sandeep.kumar/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.5.1/lib/selenium/webdriver/remote/bridge.rb:86:in `initialize'
from /Users/sandeep.kumar/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.5.1/lib/selenium/webdriver/remote/bridge.rb:53:in `new'
from /Users/sandeep.kumar/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.5.1/lib/selenium/webdriver/remote/bridge.rb:53:in `handshake'
from /Users/sandeep.kumar/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.5.1/lib/selenium/webdriver/chrome/driver.rb:57:in `initialize'
from /Users/sandeep.kumar/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.5.1/lib/selenium/webdriver/common/driver.rb:46:in `new'
from /Users/sandeep.kumar/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.5.1/lib/selenium/webdriver/common/driver.rb:46:in `for'
from /Users/sandeep.kumar/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.5.1/lib/selenium/webdriver.rb:86:in `for'
from /Users/sandeep.kumar/.rvm/gems/ruby-2.4.0/gems/watir-6.3.0/lib/watir/browser.rb:46:in `initialize'
from (irb):2:in `new'
from (irb):2
from /Users/sandeep.kumar/.rvm/rubies/ruby-2.4.0/bin/irb:11:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我拥有的 chrome 版本是 59.0.3071.115
我拥有的 chrome 驱动程序版本是
ChromeDriver 2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b
Run Code Online (Sandbox Code Playgroud)
使用
selenium-webdriver 3.4.3
watir 6.7.1 (was 6.3.0)
Run Code Online (Sandbox Code Playgroud) 我试图在chrome
运行在watir上的webdriver中添加代理身份验证,如下所示:
require 'watir'
proxies = ['--proxy-server=185.264.167.184:63109', '--proxy-auth=username:password']
browser = Watir::Browser.new :chrome, :switches => proxies
browser.goto(url)
Run Code Online (Sandbox Code Playgroud)
问题是如何在运行的chrome驱动程序中设置用户名和密码watir
?
selenium google-chrome ruby-on-rails watir selenium-chromedriver
我有一个关于 Selenium WebDriver 及其在多线程中的使用的问题。我有一个从网站获取一些数据的应用程序,因此我使用使用 Selenium WebDriver 的 Watir 浏览器。我也配置了 Sidekiq。我的流程是我将一些使用 chromedriver 初始化 watir 的作业排入队列,因此同时有 6 个并发线程运行 Selenium WebDriver。有时我会注意到一些错误,例如:
Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9519
or
Selenium::WebDriver::Error::WebDriverError: unable to bind to locking port 9514 within 45 seconds
或Selenium::WebDriver::Error::UnknownError: unknown error: failed to start a thread for the new session
。这与 Selenium 不是线程安全的事实有关吗?我认为如果我在不同的线程中初始化浏览器,那么它应该可以正常工作,但事实并非如此。有没有办法以某种方式修复它?
# frozen_string_literal: true
require 'selenium/webdriver/remote/http/curb'
module Scrapers
class Browser
def run
Watir::Browser.new(:chrome, watir_options)
end
private
def chrome_args
[
'--ignore-certificate-errors',
'--disable-popup-blocking',
'--no-sandbox',
'--window-size=1024,768',
'--disable-extensions'
]
end
def chrome_options …
Run Code Online (Sandbox Code Playgroud) 我尝试在instagram上上传图片,所以我需要选择上传文件的路径
但我无法使用,form.file_field.send_keys(path)
因为Instagram通过JS管理上传,因此该表单不存在,只有当我单击按钮“ +”时,才会出现“文件上传”窗口。
我尝试:
@browser.send_keys @path
@browser.send_keys :enter
Run Code Online (Sandbox Code Playgroud)
但也不行...
我没有找到与该子窗口“文件上载”进行交互以提供图像路径的方法。
任何的想法?
编辑:
<nav class="NXc7H f11OC "><div class="_8MQSO ZoygQ "><div class=""><div class="rBWT5"></div><div class="KGiwt"><div class="A8wCM"><div class="BvyAW"><div class="q02Nz"><a class="_0TPg" href="/"><span class="glyphsSpriteHome__outline__24__grey_9 u-__7" aria-label="Home"></span></a></div><div class="q02Nz"><a class="_0TPg" href="/explore/"><span class="glyphsSpriteSearch__outline__24__grey_9 u-__7" aria-label="Search & Explore"></span></a></div><div class="q02Nz _0TPg" role="menuitem" tabindex="0"><span class="glyphsSpriteNew_post__outline__24__grey_9 u-__7" aria-label="New Post" style=""></span></div><div class="q02Nz"><a class="_0TPg " href="/accounts/activity/"><span class="glyphsSpriteHeart__outline__24__grey_9 u-__7" aria-label="Activity"></span></a></div><div class="q02Nz"><a class="_0TPg" href="/tristan_grey_30/"><span class="glyphsSpriteUser__filled__24__grey_9 u-__7" aria-label="Profile"></span></a></div></div></div></div><form class="Q9en_" enctype="multipart/form-data" method="POST" role="presentation"><input accept="image/jpeg" class="tb_sK" type="file"></form></div></div></nav>
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用<form>
contain in <nav>
,什么也没有发生,所以在“ +”上有onClick事件:
{
!0 !== this.$_MobileNav2 …
Run Code Online (Sandbox Code Playgroud) 我有一张如下图所示的表格:我正在使用 Ruby Watir 来获取第一列的每一行。
https://dominumestate.com/wp-content/uploads/2019/08/Capture.jpg
我试过这个,但我不能得到表的每一行只有第一行
puts t.tr(:index => 2, class: ['spy1xx']).td(:index => 0).font(class: ['spy14']).text
Run Code Online (Sandbox Code Playgroud)
t = browser.table(:index => 1).tbody()
puts t.trs(:index => 2, class: ['spy1xx']).each do |s|
puts s.td(:index => 0).font(class: ['spy14']).text
end
Run Code Online (Sandbox Code Playgroud) 我的机器人从 document.txt 文件中一一读取电子邮件,在使用此电子邮件登录后,机器人会输出我在另一个文件中的评论。
我已经达到机器人读取电子邮件的程度,但我希望特定帐户做出特定而不是重复的评论。
所以我想到了从注释文件中读取特定行的解决方案。
例如,帐户 1 读取并放置评论文件的第 1 行。我想知道如何从注释文件中读取第二行。
这是我一一阅读评论时的代码部分,但我想阅读例如第二行或第三行!
file = 'comments.txt'
File.readlines(file).each do |line|
comment = ["#{line}"]
comment.each { |val|
comment = ["#{val}"]
}
end
Run Code Online (Sandbox Code Playgroud)